1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/******************************************************************** 2b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * COPYRIGHT: 3fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius * Copyright (c) 1997-2014, International Business Machines Corporation and 4b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * others. All Rights Reserved. 5b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ********************************************************************/ 6b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 7b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 8b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/utypes.h" 9b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 10b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 11b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * IntlTest is a base class for tests. 12b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 13b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 14b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include <stdio.h> 15b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include <string.h> 16b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include <assert.h> 17b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include <stdarg.h> 18b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include <stdlib.h> 19b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 20b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/unistr.h" 21b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/ures.h" 22b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/smpdtfmt.h" 23b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/ucnv.h" 24b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/uclean.h" 25b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/timezone.h" 26b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/curramt.h" 27b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/putil.h" 28b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 29b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "intltest.h" 30b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "caltztst.h" 31b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "itmajor.h" 32b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "cstring.h" 33b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "umutex.h" 34b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "uassert.h" 35b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "cmemory.h" 36b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "uoptions.h" 37b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 3827f654740f2a26ad62a5c155af9199af9e69b889claireho#include "putilimp.h" // for uprv_getRawUTCtime() 39b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/locid.h" 4027f654740f2a26ad62a5c155af9199af9e69b889claireho#include "unicode/ctest.h" // for str_timeDelta 4159d709d503bab6e2b61931737e662dd293b40578ccornelius#include "udbgutil.h" 42b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 43b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#ifdef XP_MAC_CONSOLE 44b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include <console.h> 45b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "Files.h" 46b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 47b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 48b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 49b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic char* _testDataPath=NULL; 50b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 51b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Static list of errors found 52b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic UnicodeString errorList; 5359d709d503bab6e2b61931737e662dd293b40578ccorneliusstatic void *knownList = NULL; // known issues 5459d709d503bab6e2b61931737e662dd293b40578ccorneliusstatic UBool noKnownIssues = FALSE; // if TRUE, don't emit known issues 55b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 56b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//----------------------------------------------------------------------------- 57b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//convenience classes to ease porting code that uses the Java 58b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//string-concatenation operator (moved from findword test by rtg) 59b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 60b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// [LIU] Just to get things working 61b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUnicodeString 62b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUCharToUnicodeString(UChar c) 63b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ return UnicodeString(c); } 64b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 65b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// [rtg] Just to get things working 66b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUnicodeString 67b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruoperator+(const UnicodeString& left, 68b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru long num) 69b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 70b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char buffer[64]; // nos changed from 10 to 64 71b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char danger = 'p'; // guard against overrunning the buffer (rtg) 72b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 73b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sprintf(buffer, "%ld", num); 74b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assert(danger == 'p'); 75b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 76b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return left + buffer; 77b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 78b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 79b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUnicodeString 80b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruoperator+(const UnicodeString& left, 81b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru unsigned long num) 82b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 83b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char buffer[64]; // nos changed from 10 to 64 84b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char danger = 'p'; // guard against overrunning the buffer (rtg) 85b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 86b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sprintf(buffer, "%lu", num); 87b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assert(danger == 'p'); 88b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 89b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return left + buffer; 90b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 91b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 92b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUnicodeString 93b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruInt64ToUnicodeString(int64_t num) 94b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 95b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char buffer[64]; // nos changed from 10 to 64 96b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char danger = 'p'; // guard against overrunning the buffer (rtg) 97b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 98103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#if defined(_MSC_VER) 99b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sprintf(buffer, "%I64d", num); 100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#else 101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sprintf(buffer, "%lld", (long long)num); 102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assert(danger == 'p'); 104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return buffer; 106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// [LIU] Just to get things working 109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUnicodeString 110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruoperator+(const UnicodeString& left, 111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru double num) 112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char buffer[64]; // was 32, made it arbitrarily bigger (rtg) 114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char danger = 'p'; // guard against overrunning the buffer (rtg) 115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // IEEE floating point has 52 bits of mantissa, plus one assumed bit 117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 53*log(2)/log(10) = 15.95 118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // so there is no need to show more than 16 digits. [alan] 119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sprintf(buffer, "%.17g", num); 121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assert(danger == 'p'); 122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return left + buffer; 124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 12659d709d503bab6e2b61931737e662dd293b40578ccornelius#if 0 12759d709d503bab6e2b61931737e662dd293b40578ccorneliusUnicodeString 12859d709d503bab6e2b61931737e662dd293b40578ccorneliusoperator+(const UnicodeString& left, 12959d709d503bab6e2b61931737e662dd293b40578ccornelius int64_t num) { 13059d709d503bab6e2b61931737e662dd293b40578ccornelius return left + Int64ToUnicodeString(num); 13159d709d503bab6e2b61931737e662dd293b40578ccornelius} 13259d709d503bab6e2b61931737e662dd293b40578ccornelius#endif 13359d709d503bab6e2b61931737e662dd293b40578ccornelius 134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING 135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 13727f654740f2a26ad62a5c155af9199af9e69b889claireho * Return a string display for this, without surrounding braces. 138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUnicodeString _toString(const Formattable& f) { 140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString s; 141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru switch (f.getType()) { 142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case Formattable::kDate: 143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SimpleDateFormat fmt(status); 146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_SUCCESS(status)) { 147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FieldPosition pos; 148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.format(f.getDate(), s, pos); 149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru s.insert(0, "Date:"); 150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru s = UnicodeString("Error creating date format]"); 152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case Formattable::kDouble: 156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru s = UnicodeString("double:") + f.getDouble(); 157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case Formattable::kLong: 159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru s = UnicodeString("long:") + f.getLong(); 160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case Formattable::kInt64: 163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru s = UnicodeString("int64:") + Int64ToUnicodeString(f.getInt64()); 164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case Formattable::kString: 167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru f.getString(s); 168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru s.insert(0, "String:"); 169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case Formattable::kArray: 171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i, n; 173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const Formattable* array = f.getArray(n); 174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru s.insert(0, UnicodeString("Array:")); 175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString delim(", "); 176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i=0; i<n; ++i) { 177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (i > 0) { 178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru s.append(delim); 179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru s = s + _toString(array[i]); 181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 18427f654740f2a26ad62a5c155af9199af9e69b889claireho case Formattable::kObject: { 18527f654740f2a26ad62a5c155af9199af9e69b889claireho const CurrencyAmount* c = dynamic_cast<const CurrencyAmount*>(f.getObject()); 18627f654740f2a26ad62a5c155af9199af9e69b889claireho if (c != NULL) { 18727f654740f2a26ad62a5c155af9199af9e69b889claireho s = _toString(c->getNumber()) + " " + UnicodeString(c->getISOCurrency()); 188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru s = UnicodeString("Unknown UObject"); 190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 19227f654740f2a26ad62a5c155af9199af9e69b889claireho } 193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru default: 194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru s = UnicodeString("Unknown Formattable type=") + (int32_t)f.getType(); 195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return s; 198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Originally coded this as operator+, but that makes the expression 202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * + char* ambiguous. - liu 203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUnicodeString toString(const Formattable& f) { 205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString s((UChar)91/*[*/); 206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru s.append(_toString(f)); 207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru s.append((UChar)0x5d/*]*/); 208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return s; 209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// useful when operator+ won't cooperate 214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUnicodeString toString(int32_t n) { 215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return UnicodeString() + (long)n; 216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 21859d709d503bab6e2b61931737e662dd293b40578ccornelius 21959d709d503bab6e2b61931737e662dd293b40578ccornelius 22059d709d503bab6e2b61931737e662dd293b40578ccorneliusUnicodeString toString(UBool b) { 22159d709d503bab6e2b61931737e662dd293b40578ccornelius return b ? UnicodeString("TRUE"):UnicodeString("FALSE"); 22259d709d503bab6e2b61931737e662dd293b40578ccornelius} 22359d709d503bab6e2b61931737e662dd293b40578ccornelius 224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// stephen - cleaned up 05/05/99 225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUnicodeString operator+(const UnicodeString& left, char num) 226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ return left + (long)num; } 227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUnicodeString operator+(const UnicodeString& left, short num) 228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ return left + (long)num; } 229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUnicodeString operator+(const UnicodeString& left, int num) 230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ return left + (long)num; } 231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUnicodeString operator+(const UnicodeString& left, unsigned char num) 232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ return left + (unsigned long)num; } 233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUnicodeString operator+(const UnicodeString& left, unsigned short num) 234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ return left + (unsigned long)num; } 235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUnicodeString operator+(const UnicodeString& left, unsigned int num) 236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ return left + (unsigned long)num; } 237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUnicodeString operator+(const UnicodeString& left, float num) 238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ return left + (double)num; } 239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//------------------ 241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Append a hex string to the target 243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUnicodeString& 244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruIntlTest::appendHex(uint32_t number, 245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t digits, 246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString& target) 247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const UChar digitString[] = { 249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0 251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; /* "0123456789ABCDEF" */ 252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 253f760e5e9e080f32b3afdfaea0b961ce09eb052f4Craig Cornelius if (digits < 0) { // auto-digits 254f760e5e9e080f32b3afdfaea0b961ce09eb052f4Craig Cornelius digits = 2; 255f760e5e9e080f32b3afdfaea0b961ce09eb052f4Craig Cornelius uint32_t max = 0xff; 256f760e5e9e080f32b3afdfaea0b961ce09eb052f4Craig Cornelius while (number > max) { 257f760e5e9e080f32b3afdfaea0b961ce09eb052f4Craig Cornelius digits += 2; 258f760e5e9e080f32b3afdfaea0b961ce09eb052f4Craig Cornelius max = (max << 8) | 0xff; 259f760e5e9e080f32b3afdfaea0b961ce09eb052f4Craig Cornelius } 260f760e5e9e080f32b3afdfaea0b961ce09eb052f4Craig Cornelius } 261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru switch (digits) 262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 8: 264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru target += digitString[(number >> 28) & 0xF]; 265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 7: 266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru target += digitString[(number >> 24) & 0xF]; 267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 6: 268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru target += digitString[(number >> 20) & 0xF]; 269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 5: 270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru target += digitString[(number >> 16) & 0xF]; 271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 4: 272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru target += digitString[(number >> 12) & 0xF]; 273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 3: 274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru target += digitString[(number >> 8) & 0xF]; 275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 2: 276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru target += digitString[(number >> 4) & 0xF]; 277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 1: 278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru target += digitString[(number >> 0) & 0xF]; 279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru default: 281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru target += "**"; 282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return target; 284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 286f760e5e9e080f32b3afdfaea0b961ce09eb052f4Craig CorneliusUnicodeString 287f760e5e9e080f32b3afdfaea0b961ce09eb052f4Craig CorneliusIntlTest::toHex(uint32_t number, int32_t digits) { 288f760e5e9e080f32b3afdfaea0b961ce09eb052f4Craig Cornelius UnicodeString result; 289f760e5e9e080f32b3afdfaea0b961ce09eb052f4Craig Cornelius appendHex(number, digits, result); 290f760e5e9e080f32b3afdfaea0b961ce09eb052f4Craig Cornelius return result; 291f760e5e9e080f32b3afdfaea0b961ce09eb052f4Craig Cornelius} 292f760e5e9e080f32b3afdfaea0b961ce09eb052f4Craig Cornelius 29327f654740f2a26ad62a5c155af9199af9e69b889clairehostatic inline UBool isPrintable(UChar32 c) { 29427f654740f2a26ad62a5c155af9199af9e69b889claireho return c <= 0x7E && (c >= 0x20 || c == 9 || c == 0xA || c == 0xD); 29527f654740f2a26ad62a5c155af9199af9e69b889claireho} 29627f654740f2a26ad62a5c155af9199af9e69b889claireho 297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Replace nonprintable characters with unicode escapes 298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUnicodeString& 299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruIntlTest::prettify(const UnicodeString &source, 300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString &target) 301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i; 303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru target.remove(); 305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru target += "\""; 306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i = 0; i < source.length(); ) 308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar32 ch = source.char32At(i); 31027f654740f2a26ad62a5c155af9199af9e69b889claireho i += U16_LENGTH(ch); 311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 31227f654740f2a26ad62a5c155af9199af9e69b889claireho if (!isPrintable(ch)) 313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (ch <= 0xFFFF) { 315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru target += "\\u"; 316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru appendHex(ch, 4, target); 317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru target += "\\U"; 319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru appendHex(ch, 8, target); 320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru target += ch; 325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru target += "\""; 329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return target; 331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Replace nonprintable characters with unicode escapes 334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUnicodeString 335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruIntlTest::prettify(const UnicodeString &source, UBool parseBackslash) 336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i; 338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString target; 339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru target.remove(); 340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru target += "\""; 341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i = 0; i < source.length();) 343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar32 ch = source.char32At(i); 34527f654740f2a26ad62a5c155af9199af9e69b889claireho i += U16_LENGTH(ch); 346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 34727f654740f2a26ad62a5c155af9199af9e69b889claireho if (!isPrintable(ch)) 348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (parseBackslash) { 350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // If we are preceded by an odd number of backslashes, 351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // then this character has already been backslash escaped. 352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Delete a backslash. 353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t backslashCount = 0; 354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (int32_t j=target.length()-1; j>=0; --j) { 355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (target.charAt(j) == (UChar)92) { 356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ++backslashCount; 357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if ((backslashCount % 2) == 1) { 362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru target.truncate(target.length() - 1); 363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (ch <= 0xFFFF) { 366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru target += "\\u"; 367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru appendHex(ch, 4, target); 368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru target += "\\U"; 370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru appendHex(ch, 8, target); 371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru target += ch; 376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 377b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru target += "\""; 380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 381b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return target; 382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 384b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* IntlTest::setICU_DATA - if the ICU_DATA environment variable is not already 385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * set, try to deduce the directory in which ICU was built, 386b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * and set ICU_DATA to "icu/source/data" in that location. 387b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * The intent is to allow the tests to have a good chance 388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * of running without requiring that the user manually set 389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * ICU_DATA. Common data isn't a problem, since it is 390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * picked up via a static (build time) reference, but the 391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * tests dynamically load some data. 392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid IntlTest::setICU_DATA() { 394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *original_ICU_DATA = getenv("ICU_DATA"); 395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (original_ICU_DATA != NULL && *original_ICU_DATA != 0) { 397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* If the user set ICU_DATA, don't second-guess the person. */ 398b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // U_TOPBUILDDIR is set by the makefiles on UNIXes when building cintltst and intltst 402b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // to point to the top of the build hierarchy, which may or 403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // may not be the same as the source directory, depending on 404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // the configure options used. At any rate, 405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // set the data path to the built data from this directory. 406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // The value is complete with quotes, so it can be used 407b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // as-is as a string constant. 408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if defined (U_TOPBUILDDIR) 410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 411b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static char env_string[] = U_TOPBUILDDIR "data" U_FILE_SEP_STRING "out" U_FILE_SEP_STRING; 412b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_setDataDirectory(env_string); 413b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 414b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 415b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 416b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#else 417b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Use #else so we don't get compiler warnings due to the return above. 418b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 419b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* On Windows, the file name obtained from __FILE__ includes a full path. 420b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * This file is "wherever\icu\source\test\cintltst\cintltst.c" 421b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Change to "wherever\icu\source\data" 422b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 423b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 424b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char p[sizeof(__FILE__) + 10]; 425b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char *pBackSlash; 426b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int i; 427b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 428b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strcpy(p, __FILE__); 429b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* We want to back over three '\' chars. */ 430b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Only Windows should end up here, so looking for '\' is safe. */ 431b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i=1; i<=3; i++) { 432b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pBackSlash = strrchr(p, U_FILE_SEP_CHAR); 433b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (pBackSlash != NULL) { 434b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *pBackSlash = 0; /* Truncate the string at the '\' */ 435b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 436b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 437b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 438b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (pBackSlash != NULL) { 439b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* We found and truncated three names from the path. 440b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Now append "source\data" and set the environment 441b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 442b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strcpy(pBackSlash, U_FILE_SEP_STRING "data" U_FILE_SEP_STRING "out" U_FILE_SEP_STRING); 443b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_setDataDirectory(p); /* p is "ICU_DATA=wherever\icu\source\data" */ 444b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 445b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 446b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else { 447b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* __FILE__ on MSVC7 does not contain the directory */ 448b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_setDataDirectory(".."U_FILE_SEP_STRING".."U_FILE_SEP_STRING "data" U_FILE_SEP_STRING "out" U_FILE_SEP_STRING); 449b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 450b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 452b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 453b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 454b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* No location for the data dir was identifiable. 455b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Add other fallbacks for the test data location here if the need arises 456b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 457b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 458b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 459b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 460b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//-------------------------------------------------------------------------------------- 461b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 462b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const int32_t indentLevel_offset = 3; 463b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const char delim = '/'; 464b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 465b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruIntlTest* IntlTest::gTest = NULL; 466b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 467b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic int32_t execCount = 0; 468b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 469b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid it_log( UnicodeString message ) 470b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 471b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (IntlTest::gTest) 472b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru IntlTest::gTest->log( message ); 473b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 474b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 475b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid it_logln( UnicodeString message ) 476b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 477b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (IntlTest::gTest) 478b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru IntlTest::gTest->logln( message ); 479b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 480b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 481b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid it_logln( void ) 482b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 483b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (IntlTest::gTest) 484b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru IntlTest::gTest->logln(); 485b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 486b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 487b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid it_info( UnicodeString message ) 488b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 489b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (IntlTest::gTest) 490b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru IntlTest::gTest->info( message ); 491b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 492b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 493b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid it_infoln( UnicodeString message ) 494b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 495b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (IntlTest::gTest) 496b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru IntlTest::gTest->infoln( message ); 497b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 498b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 499b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid it_infoln( void ) 500b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 501b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (IntlTest::gTest) 502b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru IntlTest::gTest->infoln(); 503b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 504b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 505b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid it_err() 506b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 507b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (IntlTest::gTest) 508b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru IntlTest::gTest->err(); 509b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 510b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 511b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid it_err( UnicodeString message ) 512b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 513b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (IntlTest::gTest) 514b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru IntlTest::gTest->err( message ); 515b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 516b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 517b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid it_errln( UnicodeString message ) 518b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 519b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (IntlTest::gTest) 520b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru IntlTest::gTest->errln( message ); 521b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 522b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 523b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid it_dataerr( UnicodeString message ) 524b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 525b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (IntlTest::gTest) 526b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru IntlTest::gTest->dataerr( message ); 527b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 528b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 529b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid it_dataerrln( UnicodeString message ) 530b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 531b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (IntlTest::gTest) 532b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru IntlTest::gTest->dataerrln( message ); 533b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 534b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 535b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruIntlTest::IntlTest() 536b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 537b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru caller = NULL; 538b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testPath = NULL; 539b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru LL_linestart = TRUE; 540b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCount = 0; 541b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dataErrorCount = 0; 542b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru verbose = FALSE; 54354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius no_time = FALSE; 544b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru no_err_msg = FALSE; 545b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru warn_on_missing_data = FALSE; 546b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru quick = FALSE; 547b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru leaks = FALSE; 54850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho threadCount = 1; 549b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testoutfp = stdout; 550b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru LL_indentlevel = indentLevel_offset; 551b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru numProps = 0; 55227f654740f2a26ad62a5c155af9199af9e69b889claireho strcpy(basePath, "/"); 55359d709d503bab6e2b61931737e662dd293b40578ccornelius currName[0]=0; 554b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 555b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 556b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid IntlTest::setCaller( IntlTest* callingTest ) 557b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 558b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru caller = callingTest; 559b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (caller) { 560c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru warn_on_missing_data = caller->warn_on_missing_data; 561b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru verbose = caller->verbose; 562b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru no_err_msg = caller->no_err_msg; 563b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru quick = caller->quick; 564b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testoutfp = caller->testoutfp; 565b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru LL_indentlevel = caller->LL_indentlevel + indentLevel_offset; 566b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru numProps = caller->numProps; 567b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru for (int32_t i = 0; i < numProps; i++) { 568b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru proplines[i] = caller->proplines[i]; 569b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 570b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 571b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 572b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 573b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUBool IntlTest::callTest( IntlTest& testToBeCalled, char* par ) 574b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 575b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru execCount--; // correct a previously assumed test-exec, as this only calls a subtest 576b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testToBeCalled.setCaller( this ); 57727f654740f2a26ad62a5c155af9199af9e69b889claireho strcpy(testToBeCalled.basePath, this->basePath ); 57827f654740f2a26ad62a5c155af9199af9e69b889claireho UBool result = testToBeCalled.runTest( testPath, par, testToBeCalled.basePath ); 57927f654740f2a26ad62a5c155af9199af9e69b889claireho strcpy(testToBeCalled.basePath, this->basePath ); // reset it. 58027f654740f2a26ad62a5c155af9199af9e69b889claireho return result; 581b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 582b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 583b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid IntlTest::setPath( char* pathVal ) 584b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 585b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru this->testPath = pathVal; 586b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 587b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 588b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUBool IntlTest::setVerbose( UBool verboseVal ) 589b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 590b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool rval = this->verbose; 591b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru this->verbose = verboseVal; 592b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return rval; 593b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 594b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 59554dcd9b6a06071f647dac967e9e267abb9410720Craig CorneliusUBool IntlTest::setNotime( UBool no_time ) 59654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius{ 59754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UBool rval = this->no_time; 59854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius this->no_time = no_time; 59954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius return rval; 60054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius} 60154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 602b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUBool IntlTest::setWarnOnMissingData( UBool warn_on_missing_dataVal ) 603b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 604b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool rval = this->warn_on_missing_data; 605b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru this->warn_on_missing_data = warn_on_missing_dataVal; 606b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return rval; 607b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 608b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 609b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUBool IntlTest::setNoErrMsg( UBool no_err_msgVal ) 610b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 611b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool rval = this->no_err_msg; 612b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru this->no_err_msg = no_err_msgVal; 613b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return rval; 614b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 615b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 616b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUBool IntlTest::setQuick( UBool quickVal ) 617b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 618b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool rval = this->quick; 619b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru this->quick = quickVal; 620b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return rval; 621b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 622b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 623b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUBool IntlTest::setLeaks( UBool leaksVal ) 624b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 625b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool rval = this->leaks; 626b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru this->leaks = leaksVal; 627b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return rval; 628b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 629b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 63050294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoint32_t IntlTest::setThreadCount( int32_t count ) 63150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho{ 63250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t rval = this->threadCount; 63350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho this->threadCount = count; 63450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return rval; 63550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 63650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 637b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruint32_t IntlTest::getErrors( void ) 638b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 639b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return errorCount; 640b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 641b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 642b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruint32_t IntlTest::getDataErrors( void ) 643b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 644b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return dataErrorCount; 645b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 646b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 64727f654740f2a26ad62a5c155af9199af9e69b889clairehoUBool IntlTest::runTest( char* name, char* par, char *baseName ) 648b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 649b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool rval; 650b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char* pos = NULL; 651b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 65227f654740f2a26ad62a5c155af9199af9e69b889claireho char* baseNameBuffer = NULL; 65327f654740f2a26ad62a5c155af9199af9e69b889claireho 65427f654740f2a26ad62a5c155af9199af9e69b889claireho if(baseName == NULL) { 65527f654740f2a26ad62a5c155af9199af9e69b889claireho baseNameBuffer = (char*)malloc(1024); 65627f654740f2a26ad62a5c155af9199af9e69b889claireho baseName=baseNameBuffer; 65727f654740f2a26ad62a5c155af9199af9e69b889claireho strcpy(baseName, "/"); 65827f654740f2a26ad62a5c155af9199af9e69b889claireho } 65927f654740f2a26ad62a5c155af9199af9e69b889claireho 660b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (name) 661b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pos = strchr( name, delim ); // check if name contains path (by looking for '/') 662b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (pos) { 663b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testPath = pos+1; // store subpath for calling subtest 664b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *pos = 0; // split into two strings 665b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }else{ 666b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testPath = NULL; 667b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 668b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 669b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!name || (name[0] == 0) || (strcmp(name, "*") == 0)) { 67027f654740f2a26ad62a5c155af9199af9e69b889claireho rval = runTestLoop( NULL, par, baseName ); 671b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 672b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }else if (strcmp( name, "LIST" ) == 0) { 673b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru this->usage(); 674b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru rval = TRUE; 675b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 676b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }else{ 67727f654740f2a26ad62a5c155af9199af9e69b889claireho rval = runTestLoop( name, par, baseName ); 678b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 679b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 680b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (pos) 681b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *pos = delim; // restore original value at pos 68227f654740f2a26ad62a5c155af9199af9e69b889claireho if(baseNameBuffer!=NULL) { 68327f654740f2a26ad62a5c155af9199af9e69b889claireho free(baseNameBuffer); 68427f654740f2a26ad62a5c155af9199af9e69b889claireho } 685b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return rval; 686b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 687b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 688b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// call individual tests, to be overriden to call implementations 68954dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliusvoid IntlTest::runIndexedTest( int32_t /*index*/, UBool /*exec*/, const char* & /*name*/, char* /*par*/ ) 690b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 691b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // to be overriden by a method like: 692b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* 693b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru switch (index) { 694b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 0: name = "First Test"; if (exec) FirstTest( par ); break; 695b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 1: name = "Second Test"; if (exec) SecondTest( par ); break; 696b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru default: name = ""; break; 697b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 698b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 699b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru this->errln("*** runIndexedTest needs to be overriden! ***"); 700b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 701b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 702b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 70327f654740f2a26ad62a5c155af9199af9e69b889clairehoUBool IntlTest::runTestLoop( char* testname, char* par, char *baseName ) 704b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 705b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t index = 0; 706b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* name; 707b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool run_this_test; 708b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t lastErrorCount; 709b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool rval = FALSE; 710b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool lastTestFailed; 711b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 71227f654740f2a26ad62a5c155af9199af9e69b889claireho if(baseName == NULL) { 71327f654740f2a26ad62a5c155af9199af9e69b889claireho printf("ERROR: baseName can't be null.\n"); 71427f654740f2a26ad62a5c155af9199af9e69b889claireho return FALSE; 71527f654740f2a26ad62a5c155af9199af9e69b889claireho } else { 71627f654740f2a26ad62a5c155af9199af9e69b889claireho if ((char *)this->basePath != baseName) { 71727f654740f2a26ad62a5c155af9199af9e69b889claireho strcpy(this->basePath, baseName); 71827f654740f2a26ad62a5c155af9199af9e69b889claireho } 71927f654740f2a26ad62a5c155af9199af9e69b889claireho } 72027f654740f2a26ad62a5c155af9199af9e69b889claireho 72127f654740f2a26ad62a5c155af9199af9e69b889claireho char * saveBaseLoc = baseName+strlen(baseName); 72227f654740f2a26ad62a5c155af9199af9e69b889claireho 723b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru IntlTest* saveTest = gTest; 724b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru gTest = this; 725b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru do { 726b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru this->runIndexedTest( index, FALSE, name, par ); 72750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (strcmp(name,"skip") == 0) { 72850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho run_this_test = FALSE; 72950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } else { 73050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (!name || (name[0] == 0)) 73150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho break; 73250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (!testname) { 73350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho run_this_test = TRUE; 73450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho }else{ 73550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho run_this_test = (UBool) (strcmp( name, testname ) == 0); 73650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 737b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 738b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (run_this_test) { 739b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru lastErrorCount = errorCount; 740b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru execCount++; 74127f654740f2a26ad62a5c155af9199af9e69b889claireho char msg[256]; 74227f654740f2a26ad62a5c155af9199af9e69b889claireho sprintf(msg, "%s {", name); 74327f654740f2a26ad62a5c155af9199af9e69b889claireho LL_message(msg, TRUE); 74427f654740f2a26ad62a5c155af9199af9e69b889claireho UDate timeStart = uprv_getRawUTCtime(); 74527f654740f2a26ad62a5c155af9199af9e69b889claireho strcpy(saveBaseLoc,name); 74627f654740f2a26ad62a5c155af9199af9e69b889claireho strcat(saveBaseLoc,"/"); 74727f654740f2a26ad62a5c155af9199af9e69b889claireho 74859d709d503bab6e2b61931737e662dd293b40578ccornelius strcpy(currName, name); // set 749b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru this->runIndexedTest( index, TRUE, name, par ); 75059d709d503bab6e2b61931737e662dd293b40578ccornelius currName[0]=0; // reset 75127f654740f2a26ad62a5c155af9199af9e69b889claireho 75227f654740f2a26ad62a5c155af9199af9e69b889claireho UDate timeStop = uprv_getRawUTCtime(); 753b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru rval = TRUE; // at least one test has been called 75427f654740f2a26ad62a5c155af9199af9e69b889claireho char secs[256]; 75554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if(!no_time) { 75654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius sprintf(secs, "%f", (timeStop-timeStart)/1000.0); 75754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } else { 75854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius secs[0]=0; 75954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 76027f654740f2a26ad62a5c155af9199af9e69b889claireho 76127f654740f2a26ad62a5c155af9199af9e69b889claireho 76227f654740f2a26ad62a5c155af9199af9e69b889claireho strcpy(saveBaseLoc,name); 76327f654740f2a26ad62a5c155af9199af9e69b889claireho 76427f654740f2a26ad62a5c155af9199af9e69b889claireho 76527f654740f2a26ad62a5c155af9199af9e69b889claireho ctest_xml_testcase(baseName, name, secs, (lastErrorCount!=errorCount)?"err":NULL); 76627f654740f2a26ad62a5c155af9199af9e69b889claireho 76727f654740f2a26ad62a5c155af9199af9e69b889claireho 76827f654740f2a26ad62a5c155af9199af9e69b889claireho saveBaseLoc[0]=0; /* reset path */ 76927f654740f2a26ad62a5c155af9199af9e69b889claireho 770b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (lastErrorCount == errorCount) { 77127f654740f2a26ad62a5c155af9199af9e69b889claireho sprintf( msg, " } OK: %s ", name ); 77254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if(!no_time) str_timeDelta(msg+strlen(msg),timeStop-timeStart); 773b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru lastTestFailed = FALSE; 774b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }else{ 77527f654740f2a26ad62a5c155af9199af9e69b889claireho sprintf(msg, " } ERRORS (%li) in %s", (long)(errorCount-lastErrorCount), name); 77654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if(!no_time) str_timeDelta(msg+strlen(msg),timeStop-timeStart); 777b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 778b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(int i=0;i<LL_indentlevel;i++) { 779b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorList += " "; 780b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 781b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorList += name; 782b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorList += "\n"; 783b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru lastTestFailed = TRUE; 784b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 785b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru LL_indentlevel -= 3; 786b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (lastTestFailed) { 787b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru LL_message( "", TRUE); 788b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 789b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru LL_message( msg, TRUE); 790b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (lastTestFailed) { 791b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru LL_message( "", TRUE); 792b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 793b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru LL_indentlevel += 3; 794b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 795b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru index++; 796b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }while(name); 797b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 79827f654740f2a26ad62a5c155af9199af9e69b889claireho *saveBaseLoc = 0; 79927f654740f2a26ad62a5c155af9199af9e69b889claireho 800b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru gTest = saveTest; 801b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return rval; 802b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 803b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 804b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 805b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 806b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Adds given string to the log if we are in verbose mode. 807b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/ 808b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid IntlTest::log( const UnicodeString &message ) 809b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 810b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( verbose ) { 811b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru LL_message( message, FALSE ); 812b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 813b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 814b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 815b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 816b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Adds given string to the log if we are in verbose mode. Adds a new line to 817b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* the given message. 818b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/ 819b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid IntlTest::logln( const UnicodeString &message ) 820b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 821b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( verbose ) { 822b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru LL_message( message, TRUE ); 823b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 824b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 825b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 826b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid IntlTest::logln( void ) 827b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 828b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( verbose ) { 829b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru LL_message( "", TRUE ); 830b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 831b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 832b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 833b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 834b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Unconditionally adds given string to the log. 835b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/ 836b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid IntlTest::info( const UnicodeString &message ) 837b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 838b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru LL_message( message, FALSE ); 839b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 840b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 841b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 842b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Unconditionally adds given string to the log. Adds a new line to 843b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* the given message. 844b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/ 845b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid IntlTest::infoln( const UnicodeString &message ) 846b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 847b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru LL_message( message, TRUE ); 848b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 849b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 850b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid IntlTest::infoln( void ) 851b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 852b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru LL_message( "", TRUE ); 853b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 854b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 855b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruint32_t IntlTest::IncErrorCount( void ) 856b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 857b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCount++; 858b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (caller) caller->IncErrorCount(); 859b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return errorCount; 860b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 861b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 862b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruint32_t IntlTest::IncDataErrorCount( void ) 863b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 864b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dataErrorCount++; 865b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (caller) caller->IncDataErrorCount(); 866b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return dataErrorCount; 867b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 868b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 869b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid IntlTest::err() 870b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 871b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru IncErrorCount(); 872b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 873b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 874b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid IntlTest::err( const UnicodeString &message ) 875b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 876b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru IncErrorCount(); 877b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!no_err_msg) LL_message( message, FALSE ); 878b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 879b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 880b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid IntlTest::errln( const UnicodeString &message ) 881b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 882b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru IncErrorCount(); 883b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!no_err_msg) LL_message( message, TRUE ); 884b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 885b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 886b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid IntlTest::dataerr( const UnicodeString &message ) 887b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 888b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru IncDataErrorCount(); 889b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 890b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!warn_on_missing_data) { 891b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru IncErrorCount(); 892b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 893b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 894b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!no_err_msg) LL_message( message, FALSE ); 895b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 896b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 897b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid IntlTest::dataerrln( const UnicodeString &message ) 898b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 89959d709d503bab6e2b61931737e662dd293b40578ccornelius int32_t errCount = IncDataErrorCount(); 9006d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru UnicodeString msg; 901b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!warn_on_missing_data) { 902b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru IncErrorCount(); 9036d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru msg = message; 9046d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } else { 9056d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru msg = UnicodeString("[DATA] " + message); 906b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 907b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 90859d709d503bab6e2b61931737e662dd293b40578ccornelius if (!no_err_msg) { 90959d709d503bab6e2b61931737e662dd293b40578ccornelius if ( errCount == 1) { 91059d709d503bab6e2b61931737e662dd293b40578ccornelius LL_message( msg + " - (Are you missing data?)", TRUE ); // only show this message the first time 91159d709d503bab6e2b61931737e662dd293b40578ccornelius } else { 91259d709d503bab6e2b61931737e662dd293b40578ccornelius LL_message( msg , TRUE ); 91359d709d503bab6e2b61931737e662dd293b40578ccornelius } 91459d709d503bab6e2b61931737e662dd293b40578ccornelius } 9156d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru} 9166d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru 9176d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queruvoid IntlTest::errcheckln(UErrorCode status, const UnicodeString &message ) { 9186d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if (status == U_FILE_ACCESS_ERROR || status == U_MISSING_RESOURCE_ERROR) { 9196d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln(message); 9206d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } else { 9216d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errln(message); 9226d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } 923b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 924b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 925b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* convenience functions that include sprintf formatting */ 926b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid IntlTest::log(const char *fmt, ...) 927b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 928b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char buffer[4000]; 929b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru va_list ap; 930b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 931b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru va_start(ap, fmt); 932b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* sprintf it just to make sure that the information is valid */ 933b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru vsprintf(buffer, fmt, ap); 934b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru va_end(ap); 935b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( verbose ) { 936b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log(UnicodeString(buffer, "")); 937b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 938b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 939b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 940b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid IntlTest::logln(const char *fmt, ...) 941b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 942b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char buffer[4000]; 943b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru va_list ap; 944b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 945b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru va_start(ap, fmt); 946b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* sprintf it just to make sure that the information is valid */ 947b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru vsprintf(buffer, fmt, ap); 948b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru va_end(ap); 949b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( verbose ) { 950b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(UnicodeString(buffer, "")); 951b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 952b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 953b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 95459d709d503bab6e2b61931737e662dd293b40578ccorneliusUBool IntlTest::logKnownIssue(const char *ticket, const char *fmt, ...) 95559d709d503bab6e2b61931737e662dd293b40578ccornelius{ 95659d709d503bab6e2b61931737e662dd293b40578ccornelius char buffer[4000]; 95759d709d503bab6e2b61931737e662dd293b40578ccornelius va_list ap; 95859d709d503bab6e2b61931737e662dd293b40578ccornelius 95959d709d503bab6e2b61931737e662dd293b40578ccornelius va_start(ap, fmt); 96059d709d503bab6e2b61931737e662dd293b40578ccornelius /* sprintf it just to make sure that the information is valid */ 96159d709d503bab6e2b61931737e662dd293b40578ccornelius vsprintf(buffer, fmt, ap); 96259d709d503bab6e2b61931737e662dd293b40578ccornelius va_end(ap); 96359d709d503bab6e2b61931737e662dd293b40578ccornelius return logKnownIssue(ticket, UnicodeString(buffer, "")); 96459d709d503bab6e2b61931737e662dd293b40578ccornelius} 96559d709d503bab6e2b61931737e662dd293b40578ccornelius 96659d709d503bab6e2b61931737e662dd293b40578ccorneliusUBool IntlTest::logKnownIssue(const char *ticket) { 96759d709d503bab6e2b61931737e662dd293b40578ccornelius return logKnownIssue(ticket, UnicodeString()); 96859d709d503bab6e2b61931737e662dd293b40578ccornelius} 96959d709d503bab6e2b61931737e662dd293b40578ccornelius 97059d709d503bab6e2b61931737e662dd293b40578ccorneliusUBool IntlTest::logKnownIssue(const char *ticket, const UnicodeString &msg) { 97159d709d503bab6e2b61931737e662dd293b40578ccornelius if(noKnownIssues) return FALSE; 97259d709d503bab6e2b61931737e662dd293b40578ccornelius 97359d709d503bab6e2b61931737e662dd293b40578ccornelius char fullpath[2048]; 97459d709d503bab6e2b61931737e662dd293b40578ccornelius strcpy(fullpath, basePath); 97559d709d503bab6e2b61931737e662dd293b40578ccornelius strcat(fullpath, currName); 97659d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString msg2 =msg; 97759d709d503bab6e2b61931737e662dd293b40578ccornelius UBool firstForTicket, firstForWhere; 97859d709d503bab6e2b61931737e662dd293b40578ccornelius knownList = udbg_knownIssue_openU(knownList, ticket, fullpath, msg2.getTerminatedBuffer(), &firstForTicket, &firstForWhere); 97959d709d503bab6e2b61931737e662dd293b40578ccornelius 980fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius msg2 = UNICODE_STRING_SIMPLE("(Known issue #") + 981fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UnicodeString(ticket, -1, US_INV) + UNICODE_STRING_SIMPLE(") ") + msg; 98259d709d503bab6e2b61931737e662dd293b40578ccornelius if(firstForTicket || firstForWhere) { 983fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius infoln(msg2); 98459d709d503bab6e2b61931737e662dd293b40578ccornelius } else { 985fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius logln(msg2); 98659d709d503bab6e2b61931737e662dd293b40578ccornelius } 98759d709d503bab6e2b61931737e662dd293b40578ccornelius 98859d709d503bab6e2b61931737e662dd293b40578ccornelius return TRUE; 98959d709d503bab6e2b61931737e662dd293b40578ccornelius} 99059d709d503bab6e2b61931737e662dd293b40578ccornelius 991b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* convenience functions that include sprintf formatting */ 992b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid IntlTest::info(const char *fmt, ...) 993b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 994b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char buffer[4000]; 995b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru va_list ap; 996b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 997b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru va_start(ap, fmt); 998b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* sprintf it just to make sure that the information is valid */ 999b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru vsprintf(buffer, fmt, ap); 1000b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru va_end(ap); 1001b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru info(UnicodeString(buffer, "")); 1002b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1003b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1004b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid IntlTest::infoln(const char *fmt, ...) 1005b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1006b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char buffer[4000]; 1007b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru va_list ap; 1008b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1009b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru va_start(ap, fmt); 1010b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* sprintf it just to make sure that the information is valid */ 1011b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru vsprintf(buffer, fmt, ap); 1012b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru va_end(ap); 1013b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru infoln(UnicodeString(buffer, "")); 1014b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1015b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1016b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid IntlTest::err(const char *fmt, ...) 1017b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1018b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char buffer[4000]; 1019b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru va_list ap; 1020b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1021b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru va_start(ap, fmt); 1022b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru vsprintf(buffer, fmt, ap); 1023b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru va_end(ap); 1024b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru err(UnicodeString(buffer, "")); 1025b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1026b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1027b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid IntlTest::errln(const char *fmt, ...) 1028b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1029b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char buffer[4000]; 1030b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru va_list ap; 1031b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1032b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru va_start(ap, fmt); 1033b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru vsprintf(buffer, fmt, ap); 1034b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru va_end(ap); 1035b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(UnicodeString(buffer, "")); 1036b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1037b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1038b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid IntlTest::dataerrln(const char *fmt, ...) 1039b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1040b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char buffer[4000]; 1041b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru va_list ap; 1042b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1043b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru va_start(ap, fmt); 1044b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru vsprintf(buffer, fmt, ap); 1045b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru va_end(ap); 1046b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dataerrln(UnicodeString(buffer, "")); 1047b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1048b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 10496d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queruvoid IntlTest::errcheckln(UErrorCode status, const char *fmt, ...) 10506d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru{ 10516d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru char buffer[4000]; 10526d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru va_list ap; 10536d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru 10546d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru va_start(ap, fmt); 10556d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru vsprintf(buffer, fmt, ap); 10566d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru va_end(ap); 10576d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru 10586d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if (status == U_FILE_ACCESS_ERROR || status == U_MISSING_RESOURCE_ERROR) { 10596d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln(UnicodeString(buffer, "")); 10606d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } else { 10616d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errln(UnicodeString(buffer, "")); 10626d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } 10636d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru} 10646d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru 1065b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid IntlTest::printErrors() 1066b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1067b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru IntlTest::LL_message(errorList, TRUE); 1068b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1069b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 107059d709d503bab6e2b61931737e662dd293b40578ccorneliusUBool IntlTest::printKnownIssues() 107159d709d503bab6e2b61931737e662dd293b40578ccornelius{ 107259d709d503bab6e2b61931737e662dd293b40578ccornelius if(knownList != NULL) { 107359d709d503bab6e2b61931737e662dd293b40578ccornelius udbg_knownIssue_print(knownList); 107459d709d503bab6e2b61931737e662dd293b40578ccornelius udbg_knownIssue_close(knownList); 107559d709d503bab6e2b61931737e662dd293b40578ccornelius return TRUE; 107659d709d503bab6e2b61931737e662dd293b40578ccornelius } else { 107759d709d503bab6e2b61931737e662dd293b40578ccornelius return FALSE; 107859d709d503bab6e2b61931737e662dd293b40578ccornelius } 107959d709d503bab6e2b61931737e662dd293b40578ccornelius} 108059d709d503bab6e2b61931737e662dd293b40578ccornelius 1081b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid IntlTest::LL_message( UnicodeString message, UBool newline ) 1082b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1083b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // string that starts with a LineFeed character and continues 1084b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // with spaces according to the current indentation 1085b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const UChar indentUChars[] = { 1086b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru '\n', 1087b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 1088b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 1089b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 1090b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 1091b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 1092b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 1093b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 1094b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 1095b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 1096b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32 1097b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 1098b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString indent(FALSE, indentUChars, 1 + LL_indentlevel); 1099b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1100fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius char buffer[30000]; 1101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t length; 1102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // stream out the indentation string first if necessary 1104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length = indent.extract(1, indent.length(), buffer, sizeof(buffer)); 1105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (length > 0) { 1106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fwrite(buffer, sizeof(*buffer), length, (FILE *)testoutfp); 1107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // replace each LineFeed by the indentation string 1110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru message.findAndReplace(UnicodeString((UChar)'\n'), indent); 1111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // stream out the message 1113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length = message.extract(0, message.length(), buffer, sizeof(buffer)); 1114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (length > 0) { 1115fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius length = length > 30000 ? 30000 : length; 1116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fwrite(buffer, sizeof(*buffer), length, (FILE *)testoutfp); 1117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (newline) { 1120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char newLine = '\n'; 1121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fwrite(&newLine, sizeof(newLine), 1, (FILE *)testoutfp); 1122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // A newline usually flushes the buffer, but 1125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // flush the message just in case of a core dump. 1126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fflush((FILE *)testoutfp); 1127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 1130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Print a usage message for this test class. 1131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/ 1132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid IntlTest::usage( void ) 1133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool save_verbose = setVerbose( TRUE ); 1135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Test names:"); 1136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("-----------"); 1137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t index = 0; 1139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* name = NULL; 1140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru do{ 1141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru this->runIndexedTest( index, FALSE, name ); 1142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!name) break; 1143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(name); 1144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru index++; 1145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }while (name && (name[0] != 0)); 1146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru setVerbose( save_verbose ); 1147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// memory leak reporting software will be able to take advantage of the testsuite 1151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// being run a second time local to a specific method in order to report only actual leaks 1152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUBool 1153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruIntlTest::run_phase2( char* name, char* par ) // supports reporting memory leaks 1154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString* strLeak = new UnicodeString("forced leak"); // for verifying purify filter 1156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strLeak->append(" for verifying purify filter"); 1157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return this->runTest( name, par ); 1158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if UCONFIG_NO_LEGACY_CONVERSION 1162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru# define TRY_CNV_1 "iso-8859-1" 1163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru# define TRY_CNV_2 "ibm-1208" 1164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#else 1165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru# define TRY_CNV_1 "iso-8859-7" 1166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru# define TRY_CNV_2 "sjis" 1167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 1168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruint 1170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querumain(int argc, char* argv[]) 1171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool syntax = FALSE; 1173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool all = FALSE; 1174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool verbose = FALSE; 1175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool no_err_msg = FALSE; 117654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UBool no_time = FALSE; 1177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool quick = TRUE; 1178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool name = FALSE; 1179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool leaks = FALSE; 118059d709d503bab6e2b61931737e662dd293b40578ccornelius UBool utf8 = FALSE; 118159d709d503bab6e2b61931737e662dd293b40578ccornelius const char *summary_file = NULL; 1182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool warnOnMissingData = FALSE; 1183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool defaultDataFound = FALSE; 118450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t threadCount = 1; 1185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode errorCode = U_ZERO_ERROR; 1186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UConverter *cnv = NULL; 1187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *warnOrErr = "Failure"; 1188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate startTime, endTime; 1189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t diffTime; 1190b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const char *props[IntlTest::kMaxProps]; 1191b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru int32_t nProps = 0; 1192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru U_MAIN_INIT_ARGS(argc, argv); 1194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 119527f654740f2a26ad62a5c155af9199af9e69b889claireho startTime = uprv_getRawUTCtime(); 1196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (int i = 1; i < argc; ++i) { 1198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (argv[i][0] == '-') { 1199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* str = argv[i] + 1; 1200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp("verbose", str) == 0 || 1201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strcmp("v", str) == 0) 1202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru verbose = TRUE; 1203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else if (strcmp("noerrormsg", str) == 0 || 1204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strcmp("n", str) == 0) 1205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru no_err_msg = TRUE; 1206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else if (strcmp("exhaustive", str) == 0 || 1207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strcmp("e", str) == 0) 1208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru quick = FALSE; 1209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else if (strcmp("all", str) == 0 || 1210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strcmp("a", str) == 0) 1211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru all = TRUE; 121259d709d503bab6e2b61931737e662dd293b40578ccornelius else if (strcmp("utf-8", str) == 0 || 121359d709d503bab6e2b61931737e662dd293b40578ccornelius strcmp("u", str) == 0) 121459d709d503bab6e2b61931737e662dd293b40578ccornelius utf8 = TRUE; 121559d709d503bab6e2b61931737e662dd293b40578ccornelius else if (strcmp("noknownissues", str) == 0 || 121659d709d503bab6e2b61931737e662dd293b40578ccornelius strcmp("K", str) == 0) 121759d709d503bab6e2b61931737e662dd293b40578ccornelius noKnownIssues = TRUE; 1218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else if (strcmp("leaks", str) == 0 || 1219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strcmp("l", str) == 0) 1220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru leaks = TRUE; 122154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius else if (strcmp("notime", str) == 0 || 122254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius strcmp("T", str) == 0) 122354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius no_time = TRUE; 122459d709d503bab6e2b61931737e662dd293b40578ccornelius else if (strncmp("E", str, 1) == 0) 122559d709d503bab6e2b61931737e662dd293b40578ccornelius summary_file = str+1; 122627f654740f2a26ad62a5c155af9199af9e69b889claireho else if (strcmp("x", str)==0) { 122727f654740f2a26ad62a5c155af9199af9e69b889claireho if(++i>=argc) { 122827f654740f2a26ad62a5c155af9199af9e69b889claireho printf("* Error: '-x' option requires an argument. usage: '-x outfile.xml'.\n"); 122927f654740f2a26ad62a5c155af9199af9e69b889claireho syntax = TRUE; 123027f654740f2a26ad62a5c155af9199af9e69b889claireho } 123127f654740f2a26ad62a5c155af9199af9e69b889claireho if(ctest_xml_setFileName(argv[i])) { /* set the name */ 123227f654740f2a26ad62a5c155af9199af9e69b889claireho return 1; /* error */ 123327f654740f2a26ad62a5c155af9199af9e69b889claireho } 123427f654740f2a26ad62a5c155af9199af9e69b889claireho } else if (strcmp("w", str) == 0) { 1235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru warnOnMissingData = TRUE; 1236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru warnOrErr = "WARNING"; 1237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 123850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho else if (strncmp("threads:", str, 8) == 0) { 123950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho threadCount = atoi(str + 8); 124050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 1241b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru else if (strncmp("prop:", str, 5) == 0) { 1242b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (nProps < IntlTest::kMaxProps) { 1243b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru props[nProps] = str + 5; 1244b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 1245b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru nProps++; 1246b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 1247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else { 1248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru syntax = TRUE; 1249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }else{ 1251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru name = TRUE; 1252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!all && !name) { 1256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru all = TRUE; 1257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else if (all && name) { 1258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru syntax = TRUE; 1259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (syntax) { 1262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fprintf(stdout, 1263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "### Syntax:\n" 1264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "### IntlTest [-option1 -option2 ...] [testname1 testname2 ...] \n" 126550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho "### \n" 126650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho "### Options are: verbose (v), all (a), noerrormsg (n), \n" 126727f654740f2a26ad62a5c155af9199af9e69b889claireho "### exhaustive (e), leaks (l), -x xmlfile.xml, prop:<propery>=<value>, \n" 126854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius "### notime (T), \n" 126950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho "### threads:<threadCount> (Mulithreading must first be \n" 127050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho "### enabled otherwise this will be ignored. \n" 127150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho "### The default thread count is 1.),\n" 1272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "### (Specify either -all (shortcut -a) or a test name). \n" 1273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "### -all will run all of the tests.\n" 1274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "### \n" 1275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "### To get a list of the test names type: intltest LIST \n" 1276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "### To run just the utility tests type: intltest utility \n" 1277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "### \n" 1278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "### Test names can be nested using slashes (\"testA/subtest1\") \n" 1279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "### For example to list the utility tests type: intltest utility/LIST \n" 1280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "### To run just the Locale test type: intltest utility/LocaleTest \n" 1281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "### \n" 1282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "### A parameter can be specified for a test by appending '@' and the value \n" 1283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "### to the testname. \n\n"); 1284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return 1; 1285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1287b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (nProps > IntlTest::kMaxProps) { 1288b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru fprintf(stdout, "### Too many properties. Exiting.\n"); 1289b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 1290b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 1291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru MajorTestLevel major; 1292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru major.setVerbose( verbose ); 1293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru major.setNoErrMsg( no_err_msg ); 1294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru major.setQuick( quick ); 1295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru major.setLeaks( leaks ); 129650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho major.setThreadCount( threadCount ); 1297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru major.setWarnOnMissingData( warnOnMissingData ); 129854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius major.setNotime (no_time); 1299b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru for (int32_t i = 0; i < nProps; i++) { 1300b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru major.setProperty(props[i]); 1301b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 130227f654740f2a26ad62a5c155af9199af9e69b889claireho 130327f654740f2a26ad62a5c155af9199af9e69b889claireho 1304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fprintf(stdout, "-----------------------------------------------\n"); 1305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fprintf(stdout, " IntlTest (C++) Test Suite for \n"); 1306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fprintf(stdout, " International Components for Unicode %s\n", U_ICU_VERSION); 130727f654740f2a26ad62a5c155af9199af9e69b889claireho 130827f654740f2a26ad62a5c155af9199af9e69b889claireho 1309b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru { 1310b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const char *charsetFamily = "Unknown"; 1311b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru int32_t voidSize = (int32_t)sizeof(void*); 1312b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru int32_t bits = voidSize * 8; 1313b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if(U_CHARSET_FAMILY==U_ASCII_FAMILY) { 1314b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru charsetFamily="ASCII"; 1315b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else if(U_CHARSET_FAMILY==U_EBCDIC_FAMILY) { 1316b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru charsetFamily="EBCDIC"; 1317b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 1318b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru fprintf(stdout, 1319b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru " Bits: %d, Byte order: %s, Chars: %s\n", 1320b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru bits, U_IS_BIG_ENDIAN?"Big endian":"Little endian", 1321b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru charsetFamily); 1322b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 1323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fprintf(stdout, "-----------------------------------------------\n"); 1324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fprintf(stdout, " Options: \n"); 1325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fprintf(stdout, " all (a) : %s\n", (all? "On" : "Off")); 1326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fprintf(stdout, " Verbose (v) : %s\n", (verbose? "On" : "Off")); 1327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fprintf(stdout, " No error messages (n) : %s\n", (no_err_msg? "On" : "Off")); 1328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fprintf(stdout, " Exhaustive (e) : %s\n", (!quick? "On" : "Off")); 1329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fprintf(stdout, " Leaks (l) : %s\n", (leaks? "On" : "Off")); 133059d709d503bab6e2b61931737e662dd293b40578ccornelius fprintf(stdout, " utf-8 (u) : %s\n", (utf8? "On" : "Off")); 133154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius fprintf(stdout, " notime (T) : %s\n", (no_time? "On" : "Off")); 133259d709d503bab6e2b61931737e662dd293b40578ccornelius fprintf(stdout, " noknownissues (K) : %s\n", (noKnownIssues? "On" : "Off")); 1333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fprintf(stdout, " Warn on missing data (w) : %s\n", (warnOnMissingData? "On" : "Off")); 133450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#if (ICU_USE_THREADS==0) 133550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho fprintf(stdout, " Threads : Disabled\n"); 133650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#else 133750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho fprintf(stdout, " Threads : %d\n", threadCount); 133850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#endif 1339b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru for (int32_t i = 0; i < nProps; i++) { 1340b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru fprintf(stdout, " Custom property (prop:) : %s\n", props[i]); 1341b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 1342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fprintf(stdout, "-----------------------------------------------\n"); 1343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 134459d709d503bab6e2b61931737e662dd293b40578ccornelius if(utf8) { 134559d709d503bab6e2b61931737e662dd293b40578ccornelius ucnv_setDefaultName("utf-8"); 134659d709d503bab6e2b61931737e662dd293b40578ccornelius } 1347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Check whether ICU will initialize without forcing the build data directory into 1348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * the ICU_DATA path. Success here means either the data dll contains data, or that 1349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * this test program was run with ICU_DATA set externally. Failure of this check 1350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * is normal when ICU data is not packaged into a shared library. 1351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 1352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Whether or not this test succeeds, we want to cleanup and reinitialize 1353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * with a data path so that data loading from individual files can be tested. 1354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_init(&errorCode); 1356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(errorCode)) { 1357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fprintf(stderr, 1358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "#### Note: ICU Init without build-specific setDataDirectory() failed.\n"); 1359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru defaultDataFound = FALSE; 1360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else { 1362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru defaultDataFound = TRUE; 1363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_cleanup(); 136559d709d503bab6e2b61931737e662dd293b40578ccornelius if(utf8) { 136659d709d503bab6e2b61931737e662dd293b40578ccornelius ucnv_setDefaultName("utf-8"); 136759d709d503bab6e2b61931737e662dd293b40578ccornelius } 1368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode = U_ZERO_ERROR; 1369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Initialize ICU */ 1371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!defaultDataFound) { 1372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru IntlTest::setICU_DATA(); // Must set data directory before u_init() is called. 1373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_init(&errorCode); 1375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(errorCode)) { 1376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fprintf(stderr, 1377b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "#### ERROR! %s: u_init() failed with status = \"%s\".\n" 1378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "*** Check the ICU_DATA environment variable and \n" 1379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "*** check that the data files are present.\n", argv[0], u_errorName(errorCode)); 1380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(warnOnMissingData == 0) { 1381b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fprintf(stderr, "*** Exiting. Use the '-w' option if data files were\n*** purposely removed, to continue test anyway.\n"); 1382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_cleanup(); 1383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return 1; 1384b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1386b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1387b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // initial check for the default converter 1388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode = U_ZERO_ERROR; 1389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cnv = ucnv_open(0, &errorCode); 1390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(cnv != 0) { 1391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // ok 1392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucnv_close(cnv); 1393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 1394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fprintf(stdout, 1395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "*** %s! The default converter [%s] cannot be opened.\n" 1396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "*** Check the ICU_DATA environment variable and\n" 1397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "*** check that the data files are present.\n", 1398b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru warnOrErr, ucnv_getDefaultName()); 1399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(!warnOnMissingData) { 1400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fprintf(stdout, "*** Exiting. Use the '-w' option if data files were\n*** purposely removed, to continue test anyway.\n"); 1401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return 1; 1402b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // try more data 1406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cnv = ucnv_open(TRY_CNV_2, &errorCode); 1407b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(cnv != 0) { 1408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // ok 1409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucnv_close(cnv); 1410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 1411b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fprintf(stdout, 1412b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "*** %s! The converter for " TRY_CNV_2 " cannot be opened.\n" 1413b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "*** Check the ICU_DATA environment variable and \n" 1414b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "*** check that the data files are present.\n", warnOrErr); 1415b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(!warnOnMissingData) { 1416b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fprintf(stdout, "*** Exiting. Use the '-w' option if data files were\n*** purposely removed, to continue test anyway.\n"); 1417b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return 1; 1418b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1419b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1420b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1421b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UResourceBundle *rb = ures_open(0, "en", &errorCode); 1422b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ures_close(rb); 1423b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(errorCode)) { 1424b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fprintf(stdout, 1425b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "*** %s! The \"en\" locale resource bundle cannot be opened.\n" 1426b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "*** Check the ICU_DATA environment variable and \n" 1427b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "*** check that the data files are present.\n", warnOrErr); 1428b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(!warnOnMissingData) { 1429b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fprintf(stdout, "*** Exiting. Use the '-w' option if data files were\n*** purposely removed, to continue test anyway.\n"); 1430b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return 1; 1431b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1432b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1433b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1434b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale originalLocale; // Save the default locale for comparison later on. 1435b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 143627f654740f2a26ad62a5c155af9199af9e69b889claireho if(ctest_xml_init("intltest")) 143727f654740f2a26ad62a5c155af9199af9e69b889claireho return 1; 143827f654740f2a26ad62a5c155af9199af9e69b889claireho 143927f654740f2a26ad62a5c155af9199af9e69b889claireho 1440b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* TODO: Add option to call u_cleanup and rerun tests. */ 1441b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (all) { 1442b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru major.runTest(); 1443b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (leaks) { 1444b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru major.run_phase2( NULL, NULL ); 1445b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1446b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }else{ 1447b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (int i = 1; i < argc; ++i) { 1448b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (argv[i][0] != '-') { 1449b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char* name = argv[i]; 1450b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fprintf(stdout, "\n=== Handling test: %s: ===\n", name); 145127f654740f2a26ad62a5c155af9199af9e69b889claireho 145227f654740f2a26ad62a5c155af9199af9e69b889claireho char baseName[1024]; 145327f654740f2a26ad62a5c155af9199af9e69b889claireho sprintf(baseName, "/%s/", name); 145427f654740f2a26ad62a5c155af9199af9e69b889claireho 1455b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char* parameter = strchr( name, '@' ); 1456b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (parameter) { 1457b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *parameter = 0; 1458b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru parameter += 1; 1459b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1460b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru execCount = 0; 146127f654740f2a26ad62a5c155af9199af9e69b889claireho UBool res = major.runTest( name, parameter, baseName ); 1462b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (leaks && res) { 1463b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru major.run_phase2( name, parameter ); 1464b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1465b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!res || (execCount <= 0)) { 1466b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fprintf(stdout, "\n---ERROR: Test doesn't exist: %s!\n", name); 1467b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 146827f654740f2a26ad62a5c155af9199af9e69b889claireho } else if(!strcmp(argv[i],"-x")) { 146927f654740f2a26ad62a5c155af9199af9e69b889claireho i++; 1470b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1471b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1472b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1473b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 147427f654740f2a26ad62a5c155af9199af9e69b889claireho 1475b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING 1476b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CalendarTimeZoneTest::cleanup(); 1477b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 1478b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1479b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(_testDataPath); 1480b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru _testDataPath = 0; 1481b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1482b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale lastDefaultLocale; 1483b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (originalLocale != lastDefaultLocale) { 1484b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru major.errln("FAILURE: A test changed the default locale without resetting it."); 1485b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1486b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1487b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fprintf(stdout, "\n--------------------------------------\n"); 148859d709d503bab6e2b61931737e662dd293b40578ccornelius if( major.printKnownIssues() ) { 148959d709d503bab6e2b61931737e662dd293b40578ccornelius fprintf(stdout, " To run suppressed tests, use the -K option. \n"); 149059d709d503bab6e2b61931737e662dd293b40578ccornelius } 1491b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (major.getErrors() == 0) { 1492b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Call it twice to make sure that the defaults were reset. */ 1493b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Call it before the OK message to verify proper cleanup. */ 1494b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_cleanup(); 1495b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_cleanup(); 1496b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1497b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fprintf(stdout, "OK: All tests passed without error.\n"); 1498b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1499b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (major.getDataErrors() != 0) { 1500b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fprintf(stdout, "\t*WARNING* some data-loading errors were ignored by the -w option.\n"); 1501b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1502b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }else{ 1503b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fprintf(stdout, "Errors in total: %ld.\n", (long)major.getErrors()); 1504b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru major.printErrors(); 1505b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 150659d709d503bab6e2b61931737e662dd293b40578ccornelius if(summary_file != NULL) { 150759d709d503bab6e2b61931737e662dd293b40578ccornelius FILE *summf = fopen(summary_file, "w"); 150859d709d503bab6e2b61931737e662dd293b40578ccornelius if( summf != NULL) { 150959d709d503bab6e2b61931737e662dd293b40578ccornelius char buf[10000]; 151059d709d503bab6e2b61931737e662dd293b40578ccornelius int32_t length = errorList.extract(0, errorList.length(), buf, sizeof(buf)); 151159d709d503bab6e2b61931737e662dd293b40578ccornelius fwrite(buf, sizeof(*buf), length, (FILE*)summf); 151259d709d503bab6e2b61931737e662dd293b40578ccornelius fclose(summf); 151359d709d503bab6e2b61931737e662dd293b40578ccornelius } 151459d709d503bab6e2b61931737e662dd293b40578ccornelius } 151559d709d503bab6e2b61931737e662dd293b40578ccornelius 1516b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1517b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (major.getDataErrors() != 0) { 1518b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fprintf(stdout, "\t*Note* some errors are data-loading related. If the data used is not the \n" 1519b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "\tstock ICU data (i.e some have been added or removed), consider using\n" 1520b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "\tthe '-w' option to turn these errors into warnings.\n"); 1521b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1522b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1523b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Call afterwards to display errors. */ 1524b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_cleanup(); 1525b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1526b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1527b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fprintf(stdout, "--------------------------------------\n"); 1528b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1529b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (execCount <= 0) { 1530b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fprintf(stdout, "***** Not all called tests actually exist! *****\n"); 1531b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 153254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if(!no_time) { 153354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius endTime = uprv_getRawUTCtime(); 153454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius diffTime = (int32_t)(endTime - startTime); 153554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius printf("Elapsed Time: %02d:%02d:%02d.%03d\n", 153654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius (int)((diffTime%U_MILLIS_PER_DAY)/U_MILLIS_PER_HOUR), 153754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius (int)((diffTime%U_MILLIS_PER_HOUR)/U_MILLIS_PER_MINUTE), 153854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius (int)((diffTime%U_MILLIS_PER_MINUTE)/U_MILLIS_PER_SECOND), 153954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius (int)(diffTime%U_MILLIS_PER_SECOND)); 154054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 154127f654740f2a26ad62a5c155af9199af9e69b889claireho 154227f654740f2a26ad62a5c155af9199af9e69b889claireho if(ctest_xml_fini()) 154327f654740f2a26ad62a5c155af9199af9e69b889claireho return 1; 154427f654740f2a26ad62a5c155af9199af9e69b889claireho 1545b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return major.getErrors(); 1546b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1547b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1548b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruconst char* IntlTest::loadTestData(UErrorCode& err){ 1549b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( _testDataPath == NULL){ 1550b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* directory=NULL; 1551b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UResourceBundle* test =NULL; 1552b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char* tdpath=NULL; 1553b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* tdrelativepath; 1554b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1555b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if defined (U_TOPBUILDDIR) 155654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius tdrelativepath = "test" U_FILE_SEP_STRING "testdata" U_FILE_SEP_STRING "out" U_FILE_SEP_STRING; 1557b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru directory = U_TOPBUILDDIR; 1558b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#else 155954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius tdrelativepath = ".." U_FILE_SEP_STRING "test" U_FILE_SEP_STRING "testdata" U_FILE_SEP_STRING "out" U_FILE_SEP_STRING; 1560b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru directory = pathToDataDirectory(); 1561b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 1562b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1563b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru tdpath = (char*) malloc(sizeof(char) *(( strlen(directory) * strlen(tdrelativepath)) + 100)); 1564b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1565b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1566b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* u_getDataDirectory shoul return \source\data ... set the 1567b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * directory to ..\source\data\..\test\testdata\out\testdata 1568b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1569b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strcpy(tdpath, directory); 1570b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strcat(tdpath, tdrelativepath); 1571b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strcat(tdpath,"testdata"); 1572b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1573b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test=ures_open(tdpath, "testtypes", &err); 1574b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1575b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(err)){ 1576b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru err = U_FILE_ACCESS_ERROR; 15776d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru it_dataerrln((UnicodeString)"Could not load testtypes.res in testdata bundle with path " + tdpath + (UnicodeString)" - " + u_errorName(err)); 1578b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return ""; 1579b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1580b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ures_close(test); 1581b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru _testDataPath = tdpath; 1582b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return _testDataPath; 1583b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1584b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return _testDataPath; 1585b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1586b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1587b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruconst char* IntlTest::getTestDataPath(UErrorCode& err) { 1588b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return loadTestData(err); 1589b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1590b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1591b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* Returns the path to icu/source/test/testdata/ */ 1592b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruconst char *IntlTest::getSourceTestData(UErrorCode& /*err*/) { 1593b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *srcDataDir = NULL; 1594b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#ifdef U_TOPSRCDIR 159554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius srcDataDir = U_TOPSRCDIR U_FILE_SEP_STRING"test" U_FILE_SEP_STRING "testdata" U_FILE_SEP_STRING; 1596b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#else 159754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius srcDataDir = ".." U_FILE_SEP_STRING ".." U_FILE_SEP_STRING "test" U_FILE_SEP_STRING "testdata" U_FILE_SEP_STRING; 159854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius FILE *f = fopen(".." U_FILE_SEP_STRING ".." U_FILE_SEP_STRING "test" U_FILE_SEP_STRING "testdata" U_FILE_SEP_STRING "rbbitst.txt", "r"); 1599b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (f) { 1600b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* We're in icu/source/test/intltest/ */ 1601b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fclose(f); 1602b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1603b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else { 1604b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru /* We're in icu/source/test/intltest/Platform/(Debug|Release) */ 160554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius srcDataDir = ".." U_FILE_SEP_STRING ".." U_FILE_SEP_STRING ".." U_FILE_SEP_STRING ".." U_FILE_SEP_STRING "test" U_FILE_SEP_STRING "testdata"U_FILE_SEP_STRING; 1606b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1607b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 1608b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return srcDataDir; 1609b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1610b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1611b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruconst char* IntlTest::fgDataDir = NULL; 1612b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1613b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* returns the path to icu/source/data */ 1614b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruconst char * IntlTest::pathToDataDirectory() 1615b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1616b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1617b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(fgDataDir != NULL) { 1618b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return fgDataDir; 1619b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1620b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1621b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* U_TOPSRCDIR is set by the makefiles on UNIXes when building cintltst and intltst 1622b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // to point to the top of the build hierarchy, which may or 1623b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // may not be the same as the source directory, depending on 1624b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // the configure options used. At any rate, 1625b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // set the data path to the built data from this directory. 1626b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // The value is complete with quotes, so it can be used 1627b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // as-is as a string constant. 1628b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1629b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if defined (U_TOPSRCDIR) 1630b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 1631b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fgDataDir = U_TOPSRCDIR U_FILE_SEP_STRING "data" U_FILE_SEP_STRING; 1632b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1633b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#else 1634b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1635b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* On Windows, the file name obtained from __FILE__ includes a full path. 1636b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * This file is "wherever\icu\source\test\cintltst\cintltst.c" 1637b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Change to "wherever\icu\source\data" 1638b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1639b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 1640b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static char p[sizeof(__FILE__) + 10]; 1641b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char *pBackSlash; 1642b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int i; 1643b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1644b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strcpy(p, __FILE__); 1645b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* We want to back over three '\' chars. */ 1646b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Only Windows should end up here, so looking for '\' is safe. */ 1647b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i=1; i<=3; i++) { 1648b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pBackSlash = strrchr(p, U_FILE_SEP_CHAR); 1649b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (pBackSlash != NULL) { 1650b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *pBackSlash = 0; /* Truncate the string at the '\' */ 1651b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1652b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1653b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1654b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (pBackSlash != NULL) { 1655b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* We found and truncated three names from the path. 1656b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Now append "source\data" and set the environment 1657b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1658b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strcpy(pBackSlash, U_FILE_SEP_STRING "data" U_FILE_SEP_STRING ); 1659b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fgDataDir = p; 1660b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1661b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else { 1662b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* __FILE__ on MSVC7 does not contain the directory */ 166354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius FILE *file = fopen(".." U_FILE_SEP_STRING ".."U_FILE_SEP_STRING "data" U_FILE_SEP_STRING "Makefile.in", "r"); 1664b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (file) { 1665b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fclose(file); 166654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius fgDataDir = ".." U_FILE_SEP_STRING ".."U_FILE_SEP_STRING "data" U_FILE_SEP_STRING; 1667b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1668b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else { 166954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius fgDataDir = ".." U_FILE_SEP_STRING ".." U_FILE_SEP_STRING ".." U_FILE_SEP_STRING ".."U_FILE_SEP_STRING "data" U_FILE_SEP_STRING; 1670b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1671b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1672b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1673b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 1674b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1675b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return fgDataDir; 1676b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1677b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1678b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1679b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 1680b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * This is a variant of cintltst/ccolltst.c:CharsToUChars(). 168127f654740f2a26ad62a5c155af9199af9e69b889claireho * It converts an invariant-character string into a UnicodeString, with 1682b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * unescaping \u sequences. 1683b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 168450294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoUnicodeString CharsToUnicodeString(const char* chars){ 168527f654740f2a26ad62a5c155af9199af9e69b889claireho return UnicodeString(chars, -1, US_INV).unescape(); 1686b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1687b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1688b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUnicodeString ctou(const char* chars) { 1689b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return CharsToUnicodeString(chars); 1690b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1691b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1692b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define RAND_M (714025) 1693b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define RAND_IA (1366) 1694b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define RAND_IC (150889) 1695b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1696b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic int32_t RAND_SEED; 1697b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1698b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 1699b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Returns a uniform random value x, with 0.0 <= x < 1.0. Use 1700b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * with care: Does not return all possible values; returns one of 1701b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 714,025 values, uniformly spaced. However, the period is 1702b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * effectively infinite. See: Numerical Recipes, section 7.1. 1703b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 1704b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param seedp pointer to seed. Set *seedp to any negative value 1705b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * to restart the sequence. 1706b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1707b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querufloat IntlTest::random(int32_t* seedp) { 1708b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static int32_t iy, ir[98]; 1709b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static UBool first=TRUE; 1710b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t j; 1711b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (*seedp < 0 || first) { 1712b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru first = FALSE; 1713b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if ((*seedp=(RAND_IC-(*seedp)) % RAND_M) < 0) *seedp = -(*seedp); 1714b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (j=1;j<=97;++j) { 1715b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *seedp=(RAND_IA*(*seedp)+RAND_IC) % RAND_M; 1716b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ir[j]=(*seedp); 1717b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1718b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *seedp=(RAND_IA*(*seedp)+RAND_IC) % RAND_M; 1719b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru iy=(*seedp); 1720b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1721b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru j=(int32_t)(1 + 97.0*iy/RAND_M); 1722b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru U_ASSERT(j>=1 && j<=97); 1723b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru iy=ir[j]; 1724b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *seedp=(RAND_IA*(*seedp)+RAND_IC) % RAND_M; 1725b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ir[j]=(*seedp); 1726b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return (float) iy/RAND_M; 1727b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1728b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1729b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 1730b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Convenience method using a global seed. 1731b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1732b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querufloat IntlTest::random() { 1733b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return random(&RAND_SEED); 1734b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1735b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1736b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic inline UChar toHex(int32_t i) { 1737b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return (UChar)(i + (i < 10 ? 0x30 : (0x41 - 10))); 1738b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1739b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1740b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic UnicodeString& escape(const UnicodeString& s, UnicodeString& result) { 1741b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (int32_t i=0; i<s.length(); ++i) { 1742b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar c = s[i]; 1743b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (c <= (UChar)0x7F) { 1744b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result += c; 1745b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 1746b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result += (UChar)0x5c; 1747b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result += (UChar)0x75; 1748b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result += toHex((c >> 12) & 0xF); 1749b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result += toHex((c >> 8) & 0xF); 1750b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result += toHex((c >> 4) & 0xF); 1751b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result += toHex( c & 0xF); 1752b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1753b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1754b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return result; 1755b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1756b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1757b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define VERBOSE_ASSERTIONS 1758b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 17598393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig CorneliusUBool IntlTest::assertTrue(const char* message, UBool condition, UBool quiet, UBool possibleDataError, const char *file, int line) { 17608393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius if (file != NULL) { 17618393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius if (!condition) { 17628393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius if (possibleDataError) { 17638393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius dataerrln("%s:%d: FAIL: assertTrue() failed: %s", file, line, message); 17648393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius } else { 17658393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius errln("%s:%d: FAIL: assertTrue() failed: %s", file, line, message); 17668393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius } 17678393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius } else if (!quiet) { 17688393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius logln("%s:%d: Ok: %s", file, line, message); 17696d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } 17708393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius } else { 17718393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius if (!condition) { 17728393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius if (possibleDataError) { 17738393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius dataerrln("FAIL: assertTrue() failed: %s", message); 17748393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius } else { 17758393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius errln("FAIL: assertTrue() failed: %s", message); 17768393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius } 17778393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius } else if (!quiet) { 17788393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius logln("Ok: %s", message); 17798393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius } 17808393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 1781b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1782b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return condition; 1783b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1784b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1785b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUBool IntlTest::assertFalse(const char* message, UBool condition, UBool quiet) { 1786b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (condition) { 1787b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: assertFalse() failed: %s", message); 1788b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else if (!quiet) { 1789b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Ok: %s", message); 1790b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1791b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return !condition; 1792b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1793b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 179459d709d503bab6e2b61931737e662dd293b40578ccorneliusUBool IntlTest::assertSuccess(const char* message, UErrorCode ec, UBool possibleDataError, const char *file, int line) { 179559d709d503bab6e2b61931737e662dd293b40578ccornelius if( file==NULL ) { 179659d709d503bab6e2b61931737e662dd293b40578ccornelius file = ""; // prevent failure if no file given 179759d709d503bab6e2b61931737e662dd293b40578ccornelius } 1798b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 17996d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if (possibleDataError) { 180059d709d503bab6e2b61931737e662dd293b40578ccornelius dataerrln("FAIL: %s:%d: %s (%s)", file, line, message, u_errorName(ec)); 1801c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } else { 180259d709d503bab6e2b61931737e662dd293b40578ccornelius errcheckln(ec, "FAIL: %s:%d: %s (%s)", file, line, message, u_errorName(ec)); 1803c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 1804b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return FALSE; 180559d709d503bab6e2b61931737e662dd293b40578ccornelius } else { 180659d709d503bab6e2b61931737e662dd293b40578ccornelius logln("OK: %s:%d: %s - (%s)", file, line, message, u_errorName(ec)); 1807b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1808b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return TRUE; 1809b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1810b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1811b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUBool IntlTest::assertEquals(const char* message, 1812b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UnicodeString& expected, 18136d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru const UnicodeString& actual, 18146d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru UBool possibleDataError) { 1815b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (expected != actual) { 18166d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if (possibleDataError) { 18176d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln((UnicodeString)"FAIL: " + message + "; got " + 18186d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru prettify(actual) + 18196d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru "; expected " + prettify(expected)); 18206d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } else { 18216d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errln((UnicodeString)"FAIL: " + message + "; got " + 18226d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru prettify(actual) + 18236d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru "; expected " + prettify(expected)); 18246d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } 1825b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return FALSE; 1826b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1827b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#ifdef VERBOSE_ASSERTIONS 1828b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else { 1829b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Ok: " + message + "; got " + prettify(actual)); 1830b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1831b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 1832b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return TRUE; 1833b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1834b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1835b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUBool IntlTest::assertEquals(const char* message, 1836b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* expected, 1837b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* actual) { 1838b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (uprv_strcmp(expected, actual) != 0) { 1839b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"FAIL: " + message + "; got \"" + 1840b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru actual + 1841b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "\"; expected \"" + expected + "\""); 1842b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return FALSE; 1843b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1844b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#ifdef VERBOSE_ASSERTIONS 1845b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else { 1846b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Ok: " + message + "; got \"" + actual + "\""); 1847b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1848b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 1849b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return TRUE; 1850b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1851b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1852f760e5e9e080f32b3afdfaea0b961ce09eb052f4Craig CorneliusUBool IntlTest::assertEquals(const char* message, 1853f760e5e9e080f32b3afdfaea0b961ce09eb052f4Craig Cornelius int32_t expected, 1854f760e5e9e080f32b3afdfaea0b961ce09eb052f4Craig Cornelius int32_t actual) { 1855f760e5e9e080f32b3afdfaea0b961ce09eb052f4Craig Cornelius if (expected != actual) { 1856f760e5e9e080f32b3afdfaea0b961ce09eb052f4Craig Cornelius errln((UnicodeString)"FAIL: " + message + "; got " + 1857f760e5e9e080f32b3afdfaea0b961ce09eb052f4Craig Cornelius actual + "=0x" + toHex(actual) + 1858f760e5e9e080f32b3afdfaea0b961ce09eb052f4Craig Cornelius "; expected " + expected + "=0x" + toHex(expected)); 1859f760e5e9e080f32b3afdfaea0b961ce09eb052f4Craig Cornelius return FALSE; 1860f760e5e9e080f32b3afdfaea0b961ce09eb052f4Craig Cornelius } 1861f760e5e9e080f32b3afdfaea0b961ce09eb052f4Craig Cornelius#ifdef VERBOSE_ASSERTIONS 1862f760e5e9e080f32b3afdfaea0b961ce09eb052f4Craig Cornelius else { 1863f760e5e9e080f32b3afdfaea0b961ce09eb052f4Craig Cornelius logln((UnicodeString)"Ok: " + message + "; got " + actual + "=0x" + toHex(actual)); 1864f760e5e9e080f32b3afdfaea0b961ce09eb052f4Craig Cornelius } 1865f760e5e9e080f32b3afdfaea0b961ce09eb052f4Craig Cornelius#endif 1866f760e5e9e080f32b3afdfaea0b961ce09eb052f4Craig Cornelius return TRUE; 1867f760e5e9e080f32b3afdfaea0b961ce09eb052f4Craig Cornelius} 1868f760e5e9e080f32b3afdfaea0b961ce09eb052f4Craig Cornelius 1869b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUBool IntlTest::assertEquals(const char* message, 187059d709d503bab6e2b61931737e662dd293b40578ccornelius int64_t expected, 187159d709d503bab6e2b61931737e662dd293b40578ccornelius int64_t actual) { 187259d709d503bab6e2b61931737e662dd293b40578ccornelius if (expected != actual) { 187359d709d503bab6e2b61931737e662dd293b40578ccornelius errln((UnicodeString)"FAIL: " + message + "; got int64 " + 187459d709d503bab6e2b61931737e662dd293b40578ccornelius Int64ToUnicodeString(actual) + 187559d709d503bab6e2b61931737e662dd293b40578ccornelius "; expected " + Int64ToUnicodeString(expected) ); 187659d709d503bab6e2b61931737e662dd293b40578ccornelius return FALSE; 187759d709d503bab6e2b61931737e662dd293b40578ccornelius } 187859d709d503bab6e2b61931737e662dd293b40578ccornelius#ifdef VERBOSE_ASSERTIONS 187959d709d503bab6e2b61931737e662dd293b40578ccornelius else { 188059d709d503bab6e2b61931737e662dd293b40578ccornelius logln((UnicodeString)"Ok: " + message + "; got int64 " + Int64ToUnicodeString(actual)); 188159d709d503bab6e2b61931737e662dd293b40578ccornelius } 188259d709d503bab6e2b61931737e662dd293b40578ccornelius#endif 188359d709d503bab6e2b61931737e662dd293b40578ccornelius return TRUE; 188459d709d503bab6e2b61931737e662dd293b40578ccornelius} 188559d709d503bab6e2b61931737e662dd293b40578ccornelius 188659d709d503bab6e2b61931737e662dd293b40578ccorneliusUBool IntlTest::assertEquals(const char* message, 188759d709d503bab6e2b61931737e662dd293b40578ccornelius UBool expected, 188859d709d503bab6e2b61931737e662dd293b40578ccornelius UBool actual) { 1889b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (expected != actual) { 1890b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"FAIL: " + message + "; got " + 1891b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru toString(actual) + 1892b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "; expected " + toString(expected)); 1893b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return FALSE; 1894b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1895b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#ifdef VERBOSE_ASSERTIONS 1896b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else { 189759d709d503bab6e2b61931737e662dd293b40578ccornelius logln((UnicodeString)"Ok: " + message + "; got " + toString(actual)); 189859d709d503bab6e2b61931737e662dd293b40578ccornelius } 189959d709d503bab6e2b61931737e662dd293b40578ccornelius#endif 190059d709d503bab6e2b61931737e662dd293b40578ccornelius return TRUE; 190159d709d503bab6e2b61931737e662dd293b40578ccornelius} 190259d709d503bab6e2b61931737e662dd293b40578ccornelius 190359d709d503bab6e2b61931737e662dd293b40578ccornelius#if !UCONFIG_NO_FORMATTING 190459d709d503bab6e2b61931737e662dd293b40578ccorneliusUBool IntlTest::assertEquals(const char* message, 190559d709d503bab6e2b61931737e662dd293b40578ccornelius const Formattable& expected, 190659d709d503bab6e2b61931737e662dd293b40578ccornelius const Formattable& actual, 190759d709d503bab6e2b61931737e662dd293b40578ccornelius UBool possibleDataError) { 190859d709d503bab6e2b61931737e662dd293b40578ccornelius if (expected != actual) { 190959d709d503bab6e2b61931737e662dd293b40578ccornelius if (possibleDataError) { 191059d709d503bab6e2b61931737e662dd293b40578ccornelius dataerrln((UnicodeString)"FAIL: " + message + "; got " + 191159d709d503bab6e2b61931737e662dd293b40578ccornelius toString(actual) + 191259d709d503bab6e2b61931737e662dd293b40578ccornelius "; expected " + toString(expected)); 191359d709d503bab6e2b61931737e662dd293b40578ccornelius } else { 191459d709d503bab6e2b61931737e662dd293b40578ccornelius errln((UnicodeString)"FAIL: " + message + "; got " + 191559d709d503bab6e2b61931737e662dd293b40578ccornelius toString(actual) + 191659d709d503bab6e2b61931737e662dd293b40578ccornelius "; expected " + toString(expected)); 191759d709d503bab6e2b61931737e662dd293b40578ccornelius } 191859d709d503bab6e2b61931737e662dd293b40578ccornelius return FALSE; 191959d709d503bab6e2b61931737e662dd293b40578ccornelius } 192059d709d503bab6e2b61931737e662dd293b40578ccornelius#ifdef VERBOSE_ASSERTIONS 192159d709d503bab6e2b61931737e662dd293b40578ccornelius else { 1922b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Ok: " + message + "; got " + toString(actual)); 1923b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1924b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 1925b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return TRUE; 1926b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1927b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 1928b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1929b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic char ASSERT_BUF[256]; 1930b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1931b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const char* extractToAssertBuf(const UnicodeString& message) { 1932b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString buf; 1933b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru escape(message, buf); 1934b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buf.extract(0, 0x7FFFFFFF, ASSERT_BUF, sizeof(ASSERT_BUF)-1, 0); 1935b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ASSERT_BUF[sizeof(ASSERT_BUF)-1] = 0; 1936b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return ASSERT_BUF; 1937b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1938b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1939b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUBool IntlTest::assertTrue(const UnicodeString& message, UBool condition, UBool quiet) { 1940b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return assertTrue(extractToAssertBuf(message), condition, quiet); 1941b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1942b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1943b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUBool IntlTest::assertFalse(const UnicodeString& message, UBool condition, UBool quiet) { 1944b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return assertFalse(extractToAssertBuf(message), condition, quiet); 1945b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1946b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1947b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUBool IntlTest::assertSuccess(const UnicodeString& message, UErrorCode ec) { 1948b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return assertSuccess(extractToAssertBuf(message), ec); 1949b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1950b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1951b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUBool IntlTest::assertEquals(const UnicodeString& message, 1952b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UnicodeString& expected, 195359d709d503bab6e2b61931737e662dd293b40578ccornelius const UnicodeString& actual, 195459d709d503bab6e2b61931737e662dd293b40578ccornelius UBool possibleDataError) { 195559d709d503bab6e2b61931737e662dd293b40578ccornelius return assertEquals(extractToAssertBuf(message), expected, actual, possibleDataError); 1956b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1957b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1958b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUBool IntlTest::assertEquals(const UnicodeString& message, 1959b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* expected, 1960b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* actual) { 1961b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return assertEquals(extractToAssertBuf(message), expected, actual); 1962b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 196359d709d503bab6e2b61931737e662dd293b40578ccorneliusUBool IntlTest::assertEquals(const UnicodeString& message, 196459d709d503bab6e2b61931737e662dd293b40578ccornelius UBool expected, 196559d709d503bab6e2b61931737e662dd293b40578ccornelius UBool actual) { 196659d709d503bab6e2b61931737e662dd293b40578ccornelius return assertEquals(extractToAssertBuf(message), expected, actual); 196759d709d503bab6e2b61931737e662dd293b40578ccornelius} 196859d709d503bab6e2b61931737e662dd293b40578ccorneliusUBool IntlTest::assertEquals(const UnicodeString& message, 196959d709d503bab6e2b61931737e662dd293b40578ccornelius int32_t expected, 197059d709d503bab6e2b61931737e662dd293b40578ccornelius int32_t actual) { 197159d709d503bab6e2b61931737e662dd293b40578ccornelius return assertEquals(extractToAssertBuf(message), expected, actual); 197259d709d503bab6e2b61931737e662dd293b40578ccornelius} 197359d709d503bab6e2b61931737e662dd293b40578ccorneliusUBool IntlTest::assertEquals(const UnicodeString& message, 197459d709d503bab6e2b61931737e662dd293b40578ccornelius int64_t expected, 197559d709d503bab6e2b61931737e662dd293b40578ccornelius int64_t actual) { 197659d709d503bab6e2b61931737e662dd293b40578ccornelius return assertEquals(extractToAssertBuf(message), expected, actual); 1977b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1978b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1979b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING 1980b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUBool IntlTest::assertEquals(const UnicodeString& message, 1981b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const Formattable& expected, 1982b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const Formattable& actual) { 1983b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return assertEquals(extractToAssertBuf(message), expected, actual); 1984b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1985b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 1986b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1987b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruvoid IntlTest::setProperty(const char* propline) { 1988b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (numProps < kMaxProps) { 1989b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru proplines[numProps] = propline; 1990b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 1991b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru numProps++; 1992b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru} 1993b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 1994b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruconst char* IntlTest::getProperty(const char* prop) { 1995b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const char* val = NULL; 1996b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru for (int32_t i = 0; i < numProps; i++) { 1997b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru int32_t plen = uprv_strlen(prop); 1998b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if ((int32_t)uprv_strlen(proplines[i]) > plen + 1 1999b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru && proplines[i][plen] == '=' 2000b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru && uprv_strncmp(proplines[i], prop, plen) == 0) { 2001b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru val = &(proplines[i][plen+1]); 2002b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru break; 2003b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 2004b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 2005b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru return val; 2006b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru} 2007b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 2008b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 2009b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Hey, Emacs, please set the following: 2010b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 2011b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Local Variables: 2012b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * indent-tabs-mode: nil 2013b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * End: 2014b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 2015b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 2016