1f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/******************************************************************** 2f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * COPYRIGHT: 3f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Copyright (c) 1997-2010, International Business Machines Corporation and 4f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * others. All Rights Reserved. 5f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) ********************************************************************/ 6f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 7f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 8f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#include "unicode/utypes.h" 9f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 10f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/** 11f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * IntlTest is a base class for tests. 12f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */ 13f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 14f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#include <stdio.h> 15f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#include <string.h> 16f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#include <assert.h> 17f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#include <stdarg.h> 18f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#include <stdlib.h> 19f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 20f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#include "unicode/unistr.h" 21f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#include "unicode/ures.h" 22f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#include "unicode/smpdtfmt.h" 23f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#include "unicode/ucnv.h" 24f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#include "unicode/uclean.h" 25f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#include "unicode/timezone.h" 26f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#include "unicode/curramt.h" 27f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#include "unicode/putil.h" 28f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 29f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#include "intltest.h" 30f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#include "caltztst.h" 31f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#include "itmajor.h" 32f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#include "cstring.h" 33f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#include "umutex.h" 34f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#include "uassert.h" 35f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#include "cmemory.h" 36f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#include "uoptions.h" 37f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 38f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#include "putilimp.h" // for uprv_getRawUTCtime() 39f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#include "unicode/locid.h" 40f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#include "unicode/ctest.h" // for str_timeDelta 41f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 42f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#ifdef XP_MAC_CONSOLE 43f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#include <console.h> 44f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#include "Files.h" 45f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#endif 46f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 47f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 48f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static char* _testDataPath=NULL; 49f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 50f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)// Static list of errors found 51f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static UnicodeString errorList; 52f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 53f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)//----------------------------------------------------------------------------- 54f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)//convenience classes to ease porting code that uses the Java 55f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)//string-concatenation operator (moved from findword test by rtg) 56f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 57f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)// [LIU] Just to get things working 58f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)UnicodeString 59f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)UCharToUnicodeString(UChar c) 60f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){ return UnicodeString(c); } 61f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 62f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)// [rtg] Just to get things working 63f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)UnicodeString 64f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)operator+(const UnicodeString& left, 65f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) long num) 66f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){ 67f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) char buffer[64]; // nos changed from 10 to 64 68f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) char danger = 'p'; // guard against overrunning the buffer (rtg) 69f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 70f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) sprintf(buffer, "%ld", num); 71f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) assert(danger == 'p'); 72f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 73f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return left + buffer; 74f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 75f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 76f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)UnicodeString 77f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)operator+(const UnicodeString& left, 78f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) unsigned long num) 79f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){ 80f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) char buffer[64]; // nos changed from 10 to 64 81f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) char danger = 'p'; // guard against overrunning the buffer (rtg) 82f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 83f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) sprintf(buffer, "%lu", num); 84f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) assert(danger == 'p'); 85f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 86f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return left + buffer; 87f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 88f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 89f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)UnicodeString 90f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)Int64ToUnicodeString(int64_t num) 91f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){ 92f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) char buffer[64]; // nos changed from 10 to 64 93f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) char danger = 'p'; // guard against overrunning the buffer (rtg) 94f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 95f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#ifdef U_WINDOWS 96f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) sprintf(buffer, "%I64d", num); 97f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#else 98f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) sprintf(buffer, "%lld", (long long)num); 99f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#endif 100f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) assert(danger == 'p'); 101f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 102f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return buffer; 103f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 104f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 105f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)// [LIU] Just to get things working 106f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)UnicodeString 107f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)operator+(const UnicodeString& left, 108f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) double num) 109f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){ 110f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) char buffer[64]; // was 32, made it arbitrarily bigger (rtg) 111f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) char danger = 'p'; // guard against overrunning the buffer (rtg) 112f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 113f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // IEEE floating point has 52 bits of mantissa, plus one assumed bit 114f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // 53*log(2)/log(10) = 15.95 115f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // so there is no need to show more than 16 digits. [alan] 116f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 117f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) sprintf(buffer, "%.17g", num); 118f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) assert(danger == 'p'); 119f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 120f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return left + buffer; 121f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 122f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 123f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#if !UCONFIG_NO_FORMATTING 124f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 125f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/** 126f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Return a string display for this, without surrounding braces. 127f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */ 128f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)UnicodeString _toString(const Formattable& f) { 129f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UnicodeString s; 130f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) switch (f.getType()) { 131f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) case Formattable::kDate: 132f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) { 133f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UErrorCode status = U_ZERO_ERROR; 134f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) SimpleDateFormat fmt(status); 135f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (U_SUCCESS(status)) { 136f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) FieldPosition pos; 137f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) fmt.format(f.getDate(), s, pos); 138f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) s.insert(0, "Date:"); 139f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } else { 140f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) s = UnicodeString("Error creating date format]"); 141f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 142f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 143f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) break; 144f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) case Formattable::kDouble: 145f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) s = UnicodeString("double:") + f.getDouble(); 146f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) break; 147f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) case Formattable::kLong: 148f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) s = UnicodeString("long:") + f.getLong(); 149f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) break; 150f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 151f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) case Formattable::kInt64: 152f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) s = UnicodeString("int64:") + Int64ToUnicodeString(f.getInt64()); 153f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) break; 154f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 155f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) case Formattable::kString: 156f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) f.getString(s); 157f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) s.insert(0, "String:"); 158f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) break; 159f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) case Formattable::kArray: 160f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) { 161f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) int32_t i, n; 162f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) const Formattable* array = f.getArray(n); 163f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) s.insert(0, UnicodeString("Array:")); 164f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UnicodeString delim(", "); 165f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) for (i=0; i<n; ++i) { 166f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (i > 0) { 167f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) s.append(delim); 168f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 169f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) s = s + _toString(array[i]); 170f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 171f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 172f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) break; 173f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) case Formattable::kObject: { 174f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) const CurrencyAmount* c = dynamic_cast<const CurrencyAmount*>(f.getObject()); 175f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (c != NULL) { 176f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) s = _toString(c->getNumber()) + " " + UnicodeString(c->getISOCurrency()); 177f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } else { 178f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) s = UnicodeString("Unknown UObject"); 179f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 180f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) break; 181f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 182f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) default: 183f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) s = UnicodeString("Unknown Formattable type=") + (int32_t)f.getType(); 184f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) break; 185f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 186f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return s; 187f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 188f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 189f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/** 190f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Originally coded this as operator+, but that makes the expression 191f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * + char* ambiguous. - liu 192f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */ 193f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)UnicodeString toString(const Formattable& f) { 194f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UnicodeString s((UChar)91/*[*/); 195f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) s.append(_toString(f)); 196f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) s.append((UChar)0x5d/*]*/); 197f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return s; 198f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 199f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 200f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#endif 201f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 202f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)// useful when operator+ won't cooperate 203f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)UnicodeString toString(int32_t n) { 204f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return UnicodeString() + (long)n; 205f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 206f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 207f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)// stephen - cleaned up 05/05/99 208f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)UnicodeString operator+(const UnicodeString& left, char num) 209f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){ return left + (long)num; } 210f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)UnicodeString operator+(const UnicodeString& left, short num) 211f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){ return left + (long)num; } 212f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)UnicodeString operator+(const UnicodeString& left, int num) 213f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){ return left + (long)num; } 214f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)UnicodeString operator+(const UnicodeString& left, unsigned char num) 215f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){ return left + (unsigned long)num; } 216f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)UnicodeString operator+(const UnicodeString& left, unsigned short num) 217f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){ return left + (unsigned long)num; } 218f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)UnicodeString operator+(const UnicodeString& left, unsigned int num) 219f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){ return left + (unsigned long)num; } 220f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)UnicodeString operator+(const UnicodeString& left, float num) 221f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){ return left + (double)num; } 222f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 223f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)//------------------ 224f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 225f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)// Append a hex string to the target 226f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)UnicodeString& 227f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)IntlTest::appendHex(uint32_t number, 228f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) int32_t digits, 229f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UnicodeString& target) 230f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){ 231f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) static const UChar digitString[] = { 232f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 233f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0 234f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) }; /* "0123456789ABCDEF" */ 235f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 236f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) switch (digits) 237f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) { 238f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) case 8: 239f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) target += digitString[(number >> 28) & 0xF]; 240f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) case 7: 241f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) target += digitString[(number >> 24) & 0xF]; 242f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) case 6: 243f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) target += digitString[(number >> 20) & 0xF]; 244f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) case 5: 245f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) target += digitString[(number >> 16) & 0xF]; 246f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) case 4: 247f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) target += digitString[(number >> 12) & 0xF]; 248f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) case 3: 249f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) target += digitString[(number >> 8) & 0xF]; 250f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) case 2: 251f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) target += digitString[(number >> 4) & 0xF]; 252f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) case 1: 253f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) target += digitString[(number >> 0) & 0xF]; 254f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) break; 255f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) default: 256f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) target += "**"; 257f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 258f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return target; 259f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 260f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 261f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static inline UBool isPrintable(UChar32 c) { 262f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return c <= 0x7E && (c >= 0x20 || c == 9 || c == 0xA || c == 0xD); 263f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 264f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 265f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)// Replace nonprintable characters with unicode escapes 266f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)UnicodeString& 267f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)IntlTest::prettify(const UnicodeString &source, 268f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UnicodeString &target) 269f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){ 270f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) int32_t i; 271f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 272f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) target.remove(); 273f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) target += "\""; 274f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 275f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) for (i = 0; i < source.length(); ) 276f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) { 277f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UChar32 ch = source.char32At(i); 278f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) i += U16_LENGTH(ch); 279f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 280f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (!isPrintable(ch)) 281f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) { 282f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (ch <= 0xFFFF) { 283f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) target += "\\u"; 284f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) appendHex(ch, 4, target); 285f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } else { 286f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) target += "\\U"; 287f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) appendHex(ch, 8, target); 288f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 289f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 290f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) else 291f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) { 292f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) target += ch; 293f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 294f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 295f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 296f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) target += "\""; 297f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 298f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return target; 299f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 300f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 301f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)// Replace nonprintable characters with unicode escapes 302f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)UnicodeString 303f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)IntlTest::prettify(const UnicodeString &source, UBool parseBackslash) 304f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){ 305f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) int32_t i; 306f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UnicodeString target; 307f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) target.remove(); 308f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) target += "\""; 309f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 310f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) for (i = 0; i < source.length();) 311f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) { 312f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UChar32 ch = source.char32At(i); 313f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) i += U16_LENGTH(ch); 314f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 315f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (!isPrintable(ch)) 316f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) { 317f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (parseBackslash) { 318f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // If we are preceded by an odd number of backslashes, 319f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // then this character has already been backslash escaped. 320f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // Delete a backslash. 321f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) int32_t backslashCount = 0; 322f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) for (int32_t j=target.length()-1; j>=0; --j) { 323f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (target.charAt(j) == (UChar)92) { 324f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) ++backslashCount; 325f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } else { 326f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) break; 327f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 328f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 329f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if ((backslashCount % 2) == 1) { 330f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) target.truncate(target.length() - 1); 331f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 332f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 333f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (ch <= 0xFFFF) { 334f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) target += "\\u"; 335f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) appendHex(ch, 4, target); 336f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } else { 337f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) target += "\\U"; 338f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) appendHex(ch, 8, target); 339f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 340f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 341f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) else 342f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) { 343f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) target += ch; 344f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 345f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 346f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 347f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) target += "\""; 348f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 349f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return target; 350f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 351f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 352f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/* IntlTest::setICU_DATA - if the ICU_DATA environment variable is not already 353f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * set, try to deduce the directory in which ICU was built, 354f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * and set ICU_DATA to "icu/source/data" in that location. 355f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * The intent is to allow the tests to have a good chance 356f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * of running without requiring that the user manually set 357f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * ICU_DATA. Common data isn't a problem, since it is 358f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * picked up via a static (build time) reference, but the 359f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * tests dynamically load some data. 360f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */ 361f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)void IntlTest::setICU_DATA() { 362f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) const char *original_ICU_DATA = getenv("ICU_DATA"); 363f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 364f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (original_ICU_DATA != NULL && *original_ICU_DATA != 0) { 365f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) /* If the user set ICU_DATA, don't second-guess the person. */ 366f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return; 367f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 368f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 369f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // U_TOPBUILDDIR is set by the makefiles on UNIXes when building cintltst and intltst 370f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // to point to the top of the build hierarchy, which may or 371f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // may not be the same as the source directory, depending on 372f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // the configure options used. At any rate, 373f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // set the data path to the built data from this directory. 374f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // The value is complete with quotes, so it can be used 375f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // as-is as a string constant. 376f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 377f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#if defined (U_TOPBUILDDIR) 378f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) { 379f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) static char env_string[] = U_TOPBUILDDIR "data" U_FILE_SEP_STRING "out" U_FILE_SEP_STRING; 380f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) u_setDataDirectory(env_string); 381f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return; 382f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 383f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 384f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#else 385f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // Use #else so we don't get compiler warnings due to the return above. 386f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 387f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) /* On Windows, the file name obtained from __FILE__ includes a full path. 388f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * This file is "wherever\icu\source\test\cintltst\cintltst.c" 389f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Change to "wherever\icu\source\data" 390f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */ 391f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) { 392f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) char p[sizeof(__FILE__) + 10]; 393f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) char *pBackSlash; 394f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) int i; 395f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 396f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) strcpy(p, __FILE__); 397f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) /* We want to back over three '\' chars. */ 398f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) /* Only Windows should end up here, so looking for '\' is safe. */ 399f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) for (i=1; i<=3; i++) { 400f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) pBackSlash = strrchr(p, U_FILE_SEP_CHAR); 401f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (pBackSlash != NULL) { 402f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *pBackSlash = 0; /* Truncate the string at the '\' */ 403f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 404f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 405f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 406f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (pBackSlash != NULL) { 407f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) /* We found and truncated three names from the path. 408f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Now append "source\data" and set the environment 409f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */ 410f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) strcpy(pBackSlash, U_FILE_SEP_STRING "data" U_FILE_SEP_STRING "out" U_FILE_SEP_STRING); 411f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) u_setDataDirectory(p); /* p is "ICU_DATA=wherever\icu\source\data" */ 412f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return; 413f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 414f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) else { 415f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) /* __FILE__ on MSVC7 does not contain the directory */ 416f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) u_setDataDirectory(".."U_FILE_SEP_STRING".."U_FILE_SEP_STRING "data" U_FILE_SEP_STRING "out" U_FILE_SEP_STRING); 417f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return; 418f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 419f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 420f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#endif 421f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 422f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) /* No location for the data dir was identifiable. 423f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Add other fallbacks for the test data location here if the need arises 424f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */ 425f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 426f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 427f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 428f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)//-------------------------------------------------------------------------------------- 429f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 430f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static const int32_t indentLevel_offset = 3; 431f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static const char delim = '/'; 432f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 433f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)IntlTest* IntlTest::gTest = NULL; 434f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 435f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static int32_t execCount = 0; 436f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 437f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)void it_log( UnicodeString message ) 438f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){ 439f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (IntlTest::gTest) 440f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) IntlTest::gTest->log( message ); 441f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 442f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 443f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)void it_logln( UnicodeString message ) 444f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){ 445f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (IntlTest::gTest) 446f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) IntlTest::gTest->logln( message ); 447f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 448f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 449f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)void it_logln( void ) 450f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){ 451f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (IntlTest::gTest) 452f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) IntlTest::gTest->logln(); 453f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 454f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 455f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)void it_info( UnicodeString message ) 456f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){ 457f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (IntlTest::gTest) 458f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) IntlTest::gTest->info( message ); 459f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 460f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 461f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)void it_infoln( UnicodeString message ) 462f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){ 463f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (IntlTest::gTest) 464f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) IntlTest::gTest->infoln( message ); 465f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 466f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 467f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)void it_infoln( void ) 468f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){ 469f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (IntlTest::gTest) 470f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) IntlTest::gTest->infoln(); 471f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 472f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 473f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)void it_err() 474f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){ 475f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (IntlTest::gTest) 476f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) IntlTest::gTest->err(); 477f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 478f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 479f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)void it_err( UnicodeString message ) 480f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){ 481f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (IntlTest::gTest) 482f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) IntlTest::gTest->err( message ); 483f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 484f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 485f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)void it_errln( UnicodeString message ) 486f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){ 487f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (IntlTest::gTest) 488f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) IntlTest::gTest->errln( message ); 489f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 490f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 491f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)void it_dataerr( UnicodeString message ) 492f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){ 493f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (IntlTest::gTest) 494f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) IntlTest::gTest->dataerr( message ); 495f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 496f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 497f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)void it_dataerrln( UnicodeString message ) 498f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){ 499f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (IntlTest::gTest) 500f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) IntlTest::gTest->dataerrln( message ); 501f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 502f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 503f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)IntlTest::IntlTest() 504f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){ 505f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) caller = NULL; 506f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) testPath = NULL; 507f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) LL_linestart = TRUE; 508f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errorCount = 0; 509f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) dataErrorCount = 0; 510f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) verbose = FALSE; 511f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) no_err_msg = FALSE; 512f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) warn_on_missing_data = FALSE; 513f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) quick = FALSE; 514f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) leaks = FALSE; 515f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) threadCount = 1; 516f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) testoutfp = stdout; 517f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) LL_indentlevel = indentLevel_offset; 518f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) numProps = 0; 519f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) strcpy(basePath, "/"); 520f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 521f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 522f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)void IntlTest::setCaller( IntlTest* callingTest ) 523f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){ 524f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) caller = callingTest; 525f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (caller) { 526f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) warn_on_missing_data = caller->warn_on_missing_data; 527f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) verbose = caller->verbose; 528f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) no_err_msg = caller->no_err_msg; 529f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) quick = caller->quick; 530f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) testoutfp = caller->testoutfp; 531f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) LL_indentlevel = caller->LL_indentlevel + indentLevel_offset; 532f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) numProps = caller->numProps; 533f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) for (int32_t i = 0; i < numProps; i++) { 534f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) proplines[i] = caller->proplines[i]; 535f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 536f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 537f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 538f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 539f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)UBool IntlTest::callTest( IntlTest& testToBeCalled, char* par ) 540f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){ 541f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) execCount--; // correct a previously assumed test-exec, as this only calls a subtest 542f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) testToBeCalled.setCaller( this ); 543f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) strcpy(testToBeCalled.basePath, this->basePath ); 544f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UBool result = testToBeCalled.runTest( testPath, par, testToBeCalled.basePath ); 545f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) strcpy(testToBeCalled.basePath, this->basePath ); // reset it. 546f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return result; 547f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 548f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 549f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)void IntlTest::setPath( char* pathVal ) 550f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){ 551f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) this->testPath = pathVal; 552f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 553f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 554f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)UBool IntlTest::setVerbose( UBool verboseVal ) 555f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){ 556f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UBool rval = this->verbose; 557f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) this->verbose = verboseVal; 558f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return rval; 559f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 560f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 561f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)UBool IntlTest::setWarnOnMissingData( UBool warn_on_missing_dataVal ) 562f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){ 563f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UBool rval = this->warn_on_missing_data; 564f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) this->warn_on_missing_data = warn_on_missing_dataVal; 565f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return rval; 566f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 567f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 568f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)UBool IntlTest::setNoErrMsg( UBool no_err_msgVal ) 569f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){ 570f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UBool rval = this->no_err_msg; 571f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) this->no_err_msg = no_err_msgVal; 572f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return rval; 573f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 574f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 575f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)UBool IntlTest::setQuick( UBool quickVal ) 576f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){ 577f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UBool rval = this->quick; 578f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) this->quick = quickVal; 579f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return rval; 580f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 581f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 582f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)UBool IntlTest::setLeaks( UBool leaksVal ) 583f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){ 584f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UBool rval = this->leaks; 585f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) this->leaks = leaksVal; 586f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return rval; 587f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 588f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 589f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)int32_t IntlTest::setThreadCount( int32_t count ) 590f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){ 591f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) int32_t rval = this->threadCount; 592f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) this->threadCount = count; 593f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return rval; 594f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 595f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 596f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)int32_t IntlTest::getErrors( void ) 597f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){ 598f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return errorCount; 599f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 600f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 601f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)int32_t IntlTest::getDataErrors( void ) 602f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){ 603f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return dataErrorCount; 604f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 605f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 606f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)UBool IntlTest::runTest( char* name, char* par, char *baseName ) 607f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){ 608f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UBool rval; 609f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) char* pos = NULL; 610f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 611f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) char* baseNameBuffer = NULL; 612f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 613f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(baseName == NULL) { 614f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) baseNameBuffer = (char*)malloc(1024); 615f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) baseName=baseNameBuffer; 616f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) strcpy(baseName, "/"); 617f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 618f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 619f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (name) 620f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) pos = strchr( name, delim ); // check if name contains path (by looking for '/') 621f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (pos) { 622f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) testPath = pos+1; // store subpath for calling subtest 623f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *pos = 0; // split into two strings 624f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) }else{ 625f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) testPath = NULL; 626f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 627f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 628f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (!name || (name[0] == 0) || (strcmp(name, "*") == 0)) { 629f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) rval = runTestLoop( NULL, par, baseName ); 630f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 631f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) }else if (strcmp( name, "LIST" ) == 0) { 632f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) this->usage(); 633f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) rval = TRUE; 634f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 635f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) }else{ 636f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) rval = runTestLoop( name, par, baseName ); 637f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 638f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 639f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (pos) 640f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *pos = delim; // restore original value at pos 641f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(baseNameBuffer!=NULL) { 642f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) free(baseNameBuffer); 643f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 644f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return rval; 645f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 646f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 647f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)// call individual tests, to be overriden to call implementations 648f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)void IntlTest::runIndexedTest( int32_t index, UBool exec, const char* &name, char* par ) 649f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){ 650f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // to be overriden by a method like: 651f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) /* 652f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) switch (index) { 653f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) case 0: name = "First Test"; if (exec) FirstTest( par ); break; 654f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) case 1: name = "Second Test"; if (exec) SecondTest( par ); break; 655f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) default: name = ""; break; 656f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 657f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */ 658f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) this->errln("*** runIndexedTest needs to be overriden! ***"); 659f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) name = ""; exec = exec; index = index; par = par; 660f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 661f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 662f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 663f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)UBool IntlTest::runTestLoop( char* testname, char* par, char *baseName ) 664f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){ 665f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) int32_t index = 0; 666f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) const char* name; 667f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UBool run_this_test; 668f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) int32_t lastErrorCount; 669f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UBool rval = FALSE; 670f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UBool lastTestFailed; 671f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 672f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(baseName == NULL) { 673f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) printf("ERROR: baseName can't be null.\n"); 674f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return FALSE; 675f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } else { 676f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if ((char *)this->basePath != baseName) { 677f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) strcpy(this->basePath, baseName); 678f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 679f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 680f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 681f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) char * saveBaseLoc = baseName+strlen(baseName); 682f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 683f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) IntlTest* saveTest = gTest; 684f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) gTest = this; 685f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) do { 686f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) this->runIndexedTest( index, FALSE, name, par ); 687f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (strcmp(name,"skip") == 0) { 688f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) run_this_test = FALSE; 689f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } else { 690f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (!name || (name[0] == 0)) 691f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) break; 692f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (!testname) { 693f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) run_this_test = TRUE; 694f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) }else{ 695f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) run_this_test = (UBool) (strcmp( name, testname ) == 0); 696f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 697f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 698f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (run_this_test) { 699f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) lastErrorCount = errorCount; 700f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) execCount++; 701f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) char msg[256]; 702f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) sprintf(msg, "%s {", name); 703f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) LL_message(msg, TRUE); 704f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UDate timeStart = uprv_getRawUTCtime(); 705f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) strcpy(saveBaseLoc,name); 706f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) strcat(saveBaseLoc,"/"); 707f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 708f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) this->runIndexedTest( index, TRUE, name, par ); 709f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 710f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UDate timeStop = uprv_getRawUTCtime(); 711f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) rval = TRUE; // at least one test has been called 712f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) char secs[256]; 713f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) sprintf(secs, "%f", (timeStop-timeStart)/1000.0); 714f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 715f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 716f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) strcpy(saveBaseLoc,name); 717f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 718f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 719f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) ctest_xml_testcase(baseName, name, secs, (lastErrorCount!=errorCount)?"err":NULL); 720f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 721f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 722f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) saveBaseLoc[0]=0; /* reset path */ 723f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 724f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (lastErrorCount == errorCount) { 725f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) sprintf( msg, " } OK: %s ", name ); 726f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) str_timeDelta(msg+strlen(msg),timeStop-timeStart); 727f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) lastTestFailed = FALSE; 728f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) }else{ 729f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) sprintf(msg, " } ERRORS (%li) in %s", (long)(errorCount-lastErrorCount), name); 730f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) str_timeDelta(msg+strlen(msg),timeStop-timeStart); 731f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 732f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) for(int i=0;i<LL_indentlevel;i++) { 733f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errorList += " "; 734f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 735f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errorList += name; 736f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errorList += "\n"; 737f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) lastTestFailed = TRUE; 738f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 739f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) LL_indentlevel -= 3; 740f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (lastTestFailed) { 741f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) LL_message( "", TRUE); 742f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 743f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) LL_message( msg, TRUE); 744f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (lastTestFailed) { 745f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) LL_message( "", TRUE); 746f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 747f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) LL_indentlevel += 3; 748f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 749f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) index++; 750f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) }while(name); 751f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 752f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *saveBaseLoc = 0; 753f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 754f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) gTest = saveTest; 755f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return rval; 756f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 757f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 758f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 759f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/** 760f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)* Adds given string to the log if we are in verbose mode. 761f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)*/ 762f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)void IntlTest::log( const UnicodeString &message ) 763f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){ 764f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if( verbose ) { 765f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) LL_message( message, FALSE ); 766f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 767f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 768f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 769f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/** 770f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)* Adds given string to the log if we are in verbose mode. Adds a new line to 771f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)* the given message. 772f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)*/ 773f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)void IntlTest::logln( const UnicodeString &message ) 774f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){ 775f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if( verbose ) { 776f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) LL_message( message, TRUE ); 777f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 778f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 779f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 780f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)void IntlTest::logln( void ) 781f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){ 782f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if( verbose ) { 783f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) LL_message( "", TRUE ); 784f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 785f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 786f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 787f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/** 788f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)* Unconditionally adds given string to the log. 789f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)*/ 790f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)void IntlTest::info( const UnicodeString &message ) 791f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){ 792f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) LL_message( message, FALSE ); 793f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 794f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 795f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/** 796f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)* Unconditionally adds given string to the log. Adds a new line to 797f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)* the given message. 798f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)*/ 799f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)void IntlTest::infoln( const UnicodeString &message ) 800f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){ 801f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) LL_message( message, TRUE ); 802f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 803f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 804f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)void IntlTest::infoln( void ) 805f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){ 806f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) LL_message( "", TRUE ); 807f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 808f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 809f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)int32_t IntlTest::IncErrorCount( void ) 810f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){ 811f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errorCount++; 812f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (caller) caller->IncErrorCount(); 813f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return errorCount; 814f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 815f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 816f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)int32_t IntlTest::IncDataErrorCount( void ) 817f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){ 818f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) dataErrorCount++; 819f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (caller) caller->IncDataErrorCount(); 820f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return dataErrorCount; 821f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 822f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 823f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)void IntlTest::err() 824f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){ 825f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) IncErrorCount(); 826f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 827f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 828f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)void IntlTest::err( const UnicodeString &message ) 829f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){ 830f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) IncErrorCount(); 831f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (!no_err_msg) LL_message( message, FALSE ); 832f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 833f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 834f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)void IntlTest::errln( const UnicodeString &message ) 835f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){ 836f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) IncErrorCount(); 837f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (!no_err_msg) LL_message( message, TRUE ); 838f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 839f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 840f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)void IntlTest::dataerr( const UnicodeString &message ) 841f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){ 842f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) IncDataErrorCount(); 843f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 844f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (!warn_on_missing_data) { 845f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) IncErrorCount(); 846f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 847f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 848f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (!no_err_msg) LL_message( message, FALSE ); 849f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 850f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 851f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)void IntlTest::dataerrln( const UnicodeString &message ) 852f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){ 853f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) IncDataErrorCount(); 854f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UnicodeString msg; 855f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (!warn_on_missing_data) { 856f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) IncErrorCount(); 857f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) msg = message; 858f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } else { 859f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) msg = UnicodeString("[DATA] " + message); 860f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 861f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 862f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (!no_err_msg) LL_message( msg + " - (Are you missing data?)", TRUE ); 863f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 864f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 865f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)void IntlTest::errcheckln(UErrorCode status, const UnicodeString &message ) { 866f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (status == U_FILE_ACCESS_ERROR || status == U_MISSING_RESOURCE_ERROR) { 867f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) dataerrln(message); 868f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } else { 869f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln(message); 870f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 871f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 872f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 873f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/* convenience functions that include sprintf formatting */ 874f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)void IntlTest::log(const char *fmt, ...) 875f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){ 876f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) char buffer[4000]; 877f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) va_list ap; 878f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 879f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) va_start(ap, fmt); 880f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) /* sprintf it just to make sure that the information is valid */ 881f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) vsprintf(buffer, fmt, ap); 882f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) va_end(ap); 883f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if( verbose ) { 884f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) log(UnicodeString(buffer, "")); 885f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 886f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 887f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 888f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)void IntlTest::logln(const char *fmt, ...) 889f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){ 890f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) char buffer[4000]; 891f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) va_list ap; 892f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 893f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) va_start(ap, fmt); 894f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) /* sprintf it just to make sure that the information is valid */ 895f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) vsprintf(buffer, fmt, ap); 896f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) va_end(ap); 897f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if( verbose ) { 898f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) logln(UnicodeString(buffer, "")); 899f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 900f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 901f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 902f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/* convenience functions that include sprintf formatting */ 903f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)void IntlTest::info(const char *fmt, ...) 904f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){ 905f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) char buffer[4000]; 906f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) va_list ap; 907f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 908f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) va_start(ap, fmt); 909f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) /* sprintf it just to make sure that the information is valid */ 910f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) vsprintf(buffer, fmt, ap); 911f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) va_end(ap); 912f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) info(UnicodeString(buffer, "")); 913f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 914f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 915f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)void IntlTest::infoln(const char *fmt, ...) 916f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){ 917f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) char buffer[4000]; 918f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) va_list ap; 919f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 920f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) va_start(ap, fmt); 921f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) /* sprintf it just to make sure that the information is valid */ 922f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) vsprintf(buffer, fmt, ap); 923f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) va_end(ap); 924f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) infoln(UnicodeString(buffer, "")); 925f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 926f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 927f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)void IntlTest::err(const char *fmt, ...) 928f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){ 929f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) char buffer[4000]; 930f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) va_list ap; 931f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 932f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) va_start(ap, fmt); 933f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) vsprintf(buffer, fmt, ap); 934f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) va_end(ap); 935f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) err(UnicodeString(buffer, "")); 936f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 937f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 938f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)void IntlTest::errln(const char *fmt, ...) 939f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){ 940f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) char buffer[4000]; 941f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) va_list ap; 942f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 943f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) va_start(ap, fmt); 944f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) vsprintf(buffer, fmt, ap); 945f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) va_end(ap); 946f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln(UnicodeString(buffer, "")); 947f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 948f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 949f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)void IntlTest::dataerrln(const char *fmt, ...) 950f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){ 951f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) char buffer[4000]; 952f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) va_list ap; 953f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 954f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) va_start(ap, fmt); 955f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) vsprintf(buffer, fmt, ap); 956f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) va_end(ap); 957f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) dataerrln(UnicodeString(buffer, "")); 958f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 959f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 960f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)void IntlTest::errcheckln(UErrorCode status, const char *fmt, ...) 961f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){ 962f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) char buffer[4000]; 963f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) va_list ap; 964f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 965f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) va_start(ap, fmt); 966f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) vsprintf(buffer, fmt, ap); 967f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) va_end(ap); 968f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 969f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (status == U_FILE_ACCESS_ERROR || status == U_MISSING_RESOURCE_ERROR) { 970f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) dataerrln(UnicodeString(buffer, "")); 971f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } else { 972f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln(UnicodeString(buffer, "")); 973f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 974f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 975f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 976f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)void IntlTest::printErrors() 977f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){ 978f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) IntlTest::LL_message(errorList, TRUE); 979f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 980f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 981f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)void IntlTest::LL_message( UnicodeString message, UBool newline ) 982f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){ 983f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // string that starts with a LineFeed character and continues 984f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // with spaces according to the current indentation 985f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) static const UChar indentUChars[] = { 986f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) '\n', 987f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 988f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 989f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 990f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 991f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 992f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 993f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 994f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 995f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 996f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32 997f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) }; 998f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UnicodeString indent(FALSE, indentUChars, 1 + LL_indentlevel); 999f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1000f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) char buffer[10000]; 1001f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) int32_t length; 1002f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1003f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // stream out the indentation string first if necessary 1004f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) length = indent.extract(1, indent.length(), buffer, sizeof(buffer)); 1005f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (length > 0) { 1006f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) fwrite(buffer, sizeof(*buffer), length, (FILE *)testoutfp); 1007f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1008f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1009f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // replace each LineFeed by the indentation string 1010f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) message.findAndReplace(UnicodeString((UChar)'\n'), indent); 1011f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1012f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // stream out the message 1013f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) length = message.extract(0, message.length(), buffer, sizeof(buffer)); 1014f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (length > 0) { 1015f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) length = length > 10000 ? 10000 : length; 1016f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) fwrite(buffer, sizeof(*buffer), length, (FILE *)testoutfp); 1017f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1018f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1019f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (newline) { 1020f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) char newLine = '\n'; 1021f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) fwrite(&newLine, sizeof(newLine), 1, (FILE *)testoutfp); 1022f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1023f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1024f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // A newline usually flushes the buffer, but 1025f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // flush the message just in case of a core dump. 1026f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) fflush((FILE *)testoutfp); 1027f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 1028f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1029f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/** 1030f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)* Print a usage message for this test class. 1031f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)*/ 1032f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)void IntlTest::usage( void ) 1033f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){ 1034f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UBool save_verbose = setVerbose( TRUE ); 1035f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) logln("Test names:"); 1036f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) logln("-----------"); 1037f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1038f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) int32_t index = 0; 1039f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) const char* name = NULL; 1040f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) do{ 1041f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) this->runIndexedTest( index, FALSE, name ); 1042f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (!name) break; 1043f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) logln(name); 1044f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) index++; 1045f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) }while (name && (name[0] != 0)); 1046f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) setVerbose( save_verbose ); 1047f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 1048f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1049f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1050f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)// memory leak reporting software will be able to take advantage of the testsuite 1051f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)// being run a second time local to a specific method in order to report only actual leaks 1052f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)UBool 1053f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)IntlTest::run_phase2( char* name, char* par ) // supports reporting memory leaks 1054f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){ 1055f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UnicodeString* strLeak = new UnicodeString("forced leak"); // for verifying purify filter 1056f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) strLeak->append(" for verifying purify filter"); 1057f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return this->runTest( name, par ); 1058f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 1059f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1060f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1061f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#if UCONFIG_NO_LEGACY_CONVERSION 1062f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)# define TRY_CNV_1 "iso-8859-1" 1063f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)# define TRY_CNV_2 "ibm-1208" 1064f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#else 1065f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)# define TRY_CNV_1 "iso-8859-7" 1066f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)# define TRY_CNV_2 "sjis" 1067f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#endif 1068f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1069f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)int 1070f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)main(int argc, char* argv[]) 1071f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){ 1072f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UBool syntax = FALSE; 1073f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UBool all = FALSE; 1074f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UBool verbose = FALSE; 1075f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UBool no_err_msg = FALSE; 1076f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UBool quick = TRUE; 1077f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UBool name = FALSE; 1078f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UBool leaks = FALSE; 1079f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UBool warnOnMissingData = FALSE; 1080f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UBool defaultDataFound = FALSE; 1081f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) int32_t threadCount = 1; 1082f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UErrorCode errorCode = U_ZERO_ERROR; 1083f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UConverter *cnv = NULL; 1084f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) const char *warnOrErr = "Failure"; 1085f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UDate startTime, endTime; 1086f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) int32_t diffTime; 1087f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) const char *props[IntlTest::kMaxProps]; 1088f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) int32_t nProps = 0; 1089f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1090f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) U_MAIN_INIT_ARGS(argc, argv); 1091f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1092f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) startTime = uprv_getRawUTCtime(); 1093f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1094f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) for (int i = 1; i < argc; ++i) { 1095f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (argv[i][0] == '-') { 1096f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) const char* str = argv[i] + 1; 1097f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (strcmp("verbose", str) == 0 || 1098f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) strcmp("v", str) == 0) 1099f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) verbose = TRUE; 1100f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) else if (strcmp("noerrormsg", str) == 0 || 1101f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) strcmp("n", str) == 0) 1102f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) no_err_msg = TRUE; 1103f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) else if (strcmp("exhaustive", str) == 0 || 1104f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) strcmp("e", str) == 0) 1105f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) quick = FALSE; 1106f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) else if (strcmp("all", str) == 0 || 1107f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) strcmp("a", str) == 0) 1108f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) all = TRUE; 1109f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) else if (strcmp("leaks", str) == 0 || 1110f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) strcmp("l", str) == 0) 1111f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) leaks = TRUE; 1112f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) else if (strcmp("x", str)==0) { 1113f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(++i>=argc) { 1114f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) printf("* Error: '-x' option requires an argument. usage: '-x outfile.xml'.\n"); 1115f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) syntax = TRUE; 1116f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1117f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(ctest_xml_setFileName(argv[i])) { /* set the name */ 1118f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return 1; /* error */ 1119f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1120f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } else if (strcmp("w", str) == 0) { 1121f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) warnOnMissingData = TRUE; 1122f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) warnOrErr = "WARNING"; 1123f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1124f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) else if (strncmp("threads:", str, 8) == 0) { 1125f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) threadCount = atoi(str + 8); 1126f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1127f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) else if (strncmp("prop:", str, 5) == 0) { 1128f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (nProps < IntlTest::kMaxProps) { 1129f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) props[nProps] = str + 5; 1130f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1131f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) nProps++; 1132f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1133f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) else { 1134f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) syntax = TRUE; 1135f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1136f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) }else{ 1137f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) name = TRUE; 1138f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1139f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1140f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1141f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (!all && !name) { 1142f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) all = TRUE; 1143f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } else if (all && name) { 1144f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) syntax = TRUE; 1145f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1146f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1147f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (syntax) { 1148f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) fprintf(stdout, 1149f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "### Syntax:\n" 1150f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "### IntlTest [-option1 -option2 ...] [testname1 testname2 ...] \n" 1151f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "### \n" 1152f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "### Options are: verbose (v), all (a), noerrormsg (n), \n" 1153f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "### exhaustive (e), leaks (l), -x xmlfile.xml, prop:<propery>=<value>, \n" 1154f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "### threads:<threadCount> (Mulithreading must first be \n" 1155f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "### enabled otherwise this will be ignored. \n" 1156f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "### The default thread count is 1.),\n" 1157f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "### (Specify either -all (shortcut -a) or a test name). \n" 1158f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "### -all will run all of the tests.\n" 1159f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "### \n" 1160f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "### To get a list of the test names type: intltest LIST \n" 1161f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "### To run just the utility tests type: intltest utility \n" 1162f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "### \n" 1163f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "### Test names can be nested using slashes (\"testA/subtest1\") \n" 1164f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "### For example to list the utility tests type: intltest utility/LIST \n" 1165f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "### To run just the Locale test type: intltest utility/LocaleTest \n" 1166f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "### \n" 1167f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "### A parameter can be specified for a test by appending '@' and the value \n" 1168f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "### to the testname. \n\n"); 1169f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return 1; 1170f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1171f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1172f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (nProps > IntlTest::kMaxProps) { 1173f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) fprintf(stdout, "### Too many properties. Exiting.\n"); 1174f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1175f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1176f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UBool all_tests_exist = TRUE; 1177f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) MajorTestLevel major; 1178f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) major.setVerbose( verbose ); 1179f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) major.setNoErrMsg( no_err_msg ); 1180f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) major.setQuick( quick ); 1181f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) major.setLeaks( leaks ); 1182f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) major.setThreadCount( threadCount ); 1183f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) major.setWarnOnMissingData( warnOnMissingData ); 1184f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) for (int32_t i = 0; i < nProps; i++) { 1185f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) major.setProperty(props[i]); 1186f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1187f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1188f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1189f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) fprintf(stdout, "-----------------------------------------------\n"); 1190f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) fprintf(stdout, " IntlTest (C++) Test Suite for \n"); 1191f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) fprintf(stdout, " International Components for Unicode %s\n", U_ICU_VERSION); 1192f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1193f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1194f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) { 1195f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) const char *charsetFamily = "Unknown"; 1196f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) int32_t voidSize = (int32_t)sizeof(void*); 1197f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) int32_t bits = voidSize * 8; 1198f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(U_CHARSET_FAMILY==U_ASCII_FAMILY) { 1199f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) charsetFamily="ASCII"; 1200f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } else if(U_CHARSET_FAMILY==U_EBCDIC_FAMILY) { 1201f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) charsetFamily="EBCDIC"; 1202f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1203f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) fprintf(stdout, 1204f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) " Bits: %d, Byte order: %s, Chars: %s\n", 1205f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) bits, U_IS_BIG_ENDIAN?"Big endian":"Little endian", 1206f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) charsetFamily); 1207f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1208f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) fprintf(stdout, "-----------------------------------------------\n"); 1209f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) fprintf(stdout, " Options: \n"); 1210f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) fprintf(stdout, " all (a) : %s\n", (all? "On" : "Off")); 1211f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) fprintf(stdout, " Verbose (v) : %s\n", (verbose? "On" : "Off")); 1212f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) fprintf(stdout, " No error messages (n) : %s\n", (no_err_msg? "On" : "Off")); 1213f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) fprintf(stdout, " Exhaustive (e) : %s\n", (!quick? "On" : "Off")); 1214f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) fprintf(stdout, " Leaks (l) : %s\n", (leaks? "On" : "Off")); 1215f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) fprintf(stdout, " Warn on missing data (w) : %s\n", (warnOnMissingData? "On" : "Off")); 1216f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#if (ICU_USE_THREADS==0) 1217f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) fprintf(stdout, " Threads : Disabled\n"); 1218f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#else 1219f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) fprintf(stdout, " Threads : %d\n", threadCount); 1220f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#endif 1221f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) for (int32_t i = 0; i < nProps; i++) { 1222f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) fprintf(stdout, " Custom property (prop:) : %s\n", props[i]); 1223f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1224f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) fprintf(stdout, "-----------------------------------------------\n"); 1225f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1226f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) /* Check whether ICU will initialize without forcing the build data directory into 1227f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * the ICU_DATA path. Success here means either the data dll contains data, or that 1228f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * this test program was run with ICU_DATA set externally. Failure of this check 1229f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * is normal when ICU data is not packaged into a shared library. 1230f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * 1231f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Whether or not this test succeeds, we want to cleanup and reinitialize 1232f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * with a data path so that data loading from individual files can be tested. 1233f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */ 1234f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) u_init(&errorCode); 1235f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (U_FAILURE(errorCode)) { 1236f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) fprintf(stderr, 1237f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "#### Note: ICU Init without build-specific setDataDirectory() failed.\n"); 1238f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) defaultDataFound = FALSE; 1239f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1240f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) else { 1241f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) defaultDataFound = TRUE; 1242f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1243f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) u_cleanup(); 1244f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errorCode = U_ZERO_ERROR; 1245f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1246f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) /* Initialize ICU */ 1247f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (!defaultDataFound) { 1248f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) IntlTest::setICU_DATA(); // Must set data directory before u_init() is called. 1249f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1250f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) u_init(&errorCode); 1251f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (U_FAILURE(errorCode)) { 1252f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) fprintf(stderr, 1253f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "#### ERROR! %s: u_init() failed with status = \"%s\".\n" 1254f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "*** Check the ICU_DATA environment variable and \n" 1255f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "*** check that the data files are present.\n", argv[0], u_errorName(errorCode)); 1256f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(warnOnMissingData == 0) { 1257f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) fprintf(stderr, "*** Exiting. Use the '-w' option if data files were\n*** purposely removed, to continue test anyway.\n"); 1258f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) u_cleanup(); 1259f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return 1; 1260f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1261f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1262f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1263f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1264f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // initial check for the default converter 1265f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errorCode = U_ZERO_ERROR; 1266f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) cnv = ucnv_open(0, &errorCode); 1267f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(cnv != 0) { 1268f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // ok 1269f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) ucnv_close(cnv); 1270f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } else { 1271f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) fprintf(stdout, 1272f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "*** %s! The default converter [%s] cannot be opened.\n" 1273f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "*** Check the ICU_DATA environment variable and\n" 1274f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "*** check that the data files are present.\n", 1275f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) warnOrErr, ucnv_getDefaultName()); 1276f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(!warnOnMissingData) { 1277f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) fprintf(stdout, "*** Exiting. Use the '-w' option if data files were\n*** purposely removed, to continue test anyway.\n"); 1278f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return 1; 1279f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1280f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1281f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1282f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // try more data 1283f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) cnv = ucnv_open(TRY_CNV_2, &errorCode); 1284f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(cnv != 0) { 1285f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // ok 1286f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) ucnv_close(cnv); 1287f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } else { 1288f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) fprintf(stdout, 1289f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "*** %s! The converter for " TRY_CNV_2 " cannot be opened.\n" 1290f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "*** Check the ICU_DATA environment variable and \n" 1291f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "*** check that the data files are present.\n", warnOrErr); 1292f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(!warnOnMissingData) { 1293f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) fprintf(stdout, "*** Exiting. Use the '-w' option if data files were\n*** purposely removed, to continue test anyway.\n"); 1294f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return 1; 1295f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1296f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1297f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1298f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UResourceBundle *rb = ures_open(0, "en", &errorCode); 1299f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) ures_close(rb); 1300f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(U_FAILURE(errorCode)) { 1301f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) fprintf(stdout, 1302f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "*** %s! The \"en\" locale resource bundle cannot be opened.\n" 1303f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "*** Check the ICU_DATA environment variable and \n" 1304f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "*** check that the data files are present.\n", warnOrErr); 1305f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(!warnOnMissingData) { 1306f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) fprintf(stdout, "*** Exiting. Use the '-w' option if data files were\n*** purposely removed, to continue test anyway.\n"); 1307f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return 1; 1308f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1309f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1310f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1311f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) Locale originalLocale; // Save the default locale for comparison later on. 1312f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1313f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(ctest_xml_init("intltest")) 1314f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return 1; 1315f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1316f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1317f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) /* TODO: Add option to call u_cleanup and rerun tests. */ 1318f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (all) { 1319f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) major.runTest(); 1320f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (leaks) { 1321f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) major.run_phase2( NULL, NULL ); 1322f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1323f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) }else{ 1324f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) for (int i = 1; i < argc; ++i) { 1325f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (argv[i][0] != '-') { 1326f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) char* name = argv[i]; 1327f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) fprintf(stdout, "\n=== Handling test: %s: ===\n", name); 1328f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1329f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) char baseName[1024]; 1330f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) sprintf(baseName, "/%s/", name); 1331f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1332f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) char* parameter = strchr( name, '@' ); 1333f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (parameter) { 1334f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *parameter = 0; 1335f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) parameter += 1; 1336f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1337f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) execCount = 0; 1338f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UBool res = major.runTest( name, parameter, baseName ); 1339f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (leaks && res) { 1340f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) major.run_phase2( name, parameter ); 1341f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1342f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (!res || (execCount <= 0)) { 1343f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) fprintf(stdout, "\n---ERROR: Test doesn't exist: %s!\n", name); 1344f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) all_tests_exist = FALSE; 1345f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1346f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } else if(!strcmp(argv[i],"-x")) { 1347f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) i++; 1348f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1349f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1350f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1351f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1352f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1353f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#if !UCONFIG_NO_FORMATTING 1354f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) CalendarTimeZoneTest::cleanup(); 1355f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#endif 1356f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1357f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) free(_testDataPath); 1358f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) _testDataPath = 0; 1359f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1360f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) Locale lastDefaultLocale; 1361f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (originalLocale != lastDefaultLocale) { 1362f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) major.errln("FAILURE: A test changed the default locale without resetting it."); 1363f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1364f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1365f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) fprintf(stdout, "\n--------------------------------------\n"); 1366f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (major.getErrors() == 0) { 1367f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) /* Call it twice to make sure that the defaults were reset. */ 1368f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) /* Call it before the OK message to verify proper cleanup. */ 1369f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) u_cleanup(); 1370f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) u_cleanup(); 1371f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1372f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) fprintf(stdout, "OK: All tests passed without error.\n"); 1373f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1374f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (major.getDataErrors() != 0) { 1375f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) fprintf(stdout, "\t*WARNING* some data-loading errors were ignored by the -w option.\n"); 1376f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1377f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) }else{ 1378f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) fprintf(stdout, "Errors in total: %ld.\n", (long)major.getErrors()); 1379f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) major.printErrors(); 1380f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1381f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1382f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (major.getDataErrors() != 0) { 1383f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) fprintf(stdout, "\t*Note* some errors are data-loading related. If the data used is not the \n" 1384f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "\tstock ICU data (i.e some have been added or removed), consider using\n" 1385f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "\tthe '-w' option to turn these errors into warnings.\n"); 1386f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1387f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1388f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) /* Call afterwards to display errors. */ 1389f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) u_cleanup(); 1390f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1391f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1392f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) fprintf(stdout, "--------------------------------------\n"); 1393f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1394f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (execCount <= 0) { 1395f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) fprintf(stdout, "***** Not all called tests actually exist! *****\n"); 1396f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1397f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) endTime = uprv_getRawUTCtime(); 1398f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) diffTime = (int32_t)(endTime - startTime); 1399f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) printf("Elapsed Time: %02d:%02d:%02d.%03d\n", 1400f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) (int)((diffTime%U_MILLIS_PER_DAY)/U_MILLIS_PER_HOUR), 1401f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) (int)((diffTime%U_MILLIS_PER_HOUR)/U_MILLIS_PER_MINUTE), 1402f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) (int)((diffTime%U_MILLIS_PER_MINUTE)/U_MILLIS_PER_SECOND), 1403f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) (int)(diffTime%U_MILLIS_PER_SECOND)); 1404f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1405f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(ctest_xml_fini()) 1406f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return 1; 1407f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1408f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return major.getErrors(); 1409f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 1410f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1411f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)const char* IntlTest::loadTestData(UErrorCode& err){ 1412f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if( _testDataPath == NULL){ 1413f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) const char* directory=NULL; 1414f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UResourceBundle* test =NULL; 1415f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) char* tdpath=NULL; 1416f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) const char* tdrelativepath; 1417f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1418f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#if defined (U_TOPBUILDDIR) 1419f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) tdrelativepath = "test"U_FILE_SEP_STRING"testdata"U_FILE_SEP_STRING"out"U_FILE_SEP_STRING; 1420f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) directory = U_TOPBUILDDIR; 1421f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#else 1422f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) tdrelativepath = ".."U_FILE_SEP_STRING"test"U_FILE_SEP_STRING"testdata"U_FILE_SEP_STRING"out"U_FILE_SEP_STRING; 1423f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) directory = pathToDataDirectory(); 1424f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#endif 1425f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1426f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) tdpath = (char*) malloc(sizeof(char) *(( strlen(directory) * strlen(tdrelativepath)) + 100)); 1427f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1428f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1429f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) /* u_getDataDirectory shoul return \source\data ... set the 1430f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * directory to ..\source\data\..\test\testdata\out\testdata 1431f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */ 1432f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) strcpy(tdpath, directory); 1433f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) strcat(tdpath, tdrelativepath); 1434f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) strcat(tdpath,"testdata"); 1435f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1436f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) test=ures_open(tdpath, "testtypes", &err); 1437f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1438f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(U_FAILURE(err)){ 1439f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) err = U_FILE_ACCESS_ERROR; 1440f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) it_dataerrln((UnicodeString)"Could not load testtypes.res in testdata bundle with path " + tdpath + (UnicodeString)" - " + u_errorName(err)); 1441f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return ""; 1442f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1443f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) ures_close(test); 1444f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) _testDataPath = tdpath; 1445f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return _testDataPath; 1446f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1447f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return _testDataPath; 1448f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 1449f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1450f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)const char* IntlTest::getTestDataPath(UErrorCode& err) { 1451f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return loadTestData(err); 1452f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 1453f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1454f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/* Returns the path to icu/source/test/testdata/ */ 1455f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)const char *IntlTest::getSourceTestData(UErrorCode& /*err*/) { 1456f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) const char *srcDataDir = NULL; 1457f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#ifdef U_TOPSRCDIR 1458f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) srcDataDir = U_TOPSRCDIR U_FILE_SEP_STRING"test"U_FILE_SEP_STRING"testdata"U_FILE_SEP_STRING; 1459f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#else 1460f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) srcDataDir = ".."U_FILE_SEP_STRING".."U_FILE_SEP_STRING"test"U_FILE_SEP_STRING"testdata"U_FILE_SEP_STRING; 1461f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) FILE *f = fopen(".."U_FILE_SEP_STRING".."U_FILE_SEP_STRING"test"U_FILE_SEP_STRING"testdata"U_FILE_SEP_STRING"rbbitst.txt", "r"); 1462f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (f) { 1463f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) /* We're in icu/source/test/intltest/ */ 1464f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) fclose(f); 1465f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1466f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) else { 1467f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) /* We're in icu/source/test/intltest/Platform/(Debug|Release) */ 1468f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 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; 1469f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1470f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#endif 1471f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return srcDataDir; 1472f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 1473f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1474f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)const char* IntlTest::fgDataDir = NULL; 1475f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1476f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/* returns the path to icu/source/data */ 1477f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)const char * IntlTest::pathToDataDirectory() 1478f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){ 1479f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1480f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(fgDataDir != NULL) { 1481f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return fgDataDir; 1482f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1483f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1484f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) /* U_TOPSRCDIR is set by the makefiles on UNIXes when building cintltst and intltst 1485f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // to point to the top of the build hierarchy, which may or 1486f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // may not be the same as the source directory, depending on 1487f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // the configure options used. At any rate, 1488f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // set the data path to the built data from this directory. 1489f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // The value is complete with quotes, so it can be used 1490f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // as-is as a string constant. 1491f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */ 1492f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#if defined (U_TOPSRCDIR) 1493f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) { 1494f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) fgDataDir = U_TOPSRCDIR U_FILE_SEP_STRING "data" U_FILE_SEP_STRING; 1495f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1496f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#else 1497f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1498f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) /* On Windows, the file name obtained from __FILE__ includes a full path. 1499f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * This file is "wherever\icu\source\test\cintltst\cintltst.c" 1500f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Change to "wherever\icu\source\data" 1501f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */ 1502f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) { 1503f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) static char p[sizeof(__FILE__) + 10]; 1504f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) char *pBackSlash; 1505f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) int i; 1506f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1507f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) strcpy(p, __FILE__); 1508f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) /* We want to back over three '\' chars. */ 1509f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) /* Only Windows should end up here, so looking for '\' is safe. */ 1510f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) for (i=1; i<=3; i++) { 1511f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) pBackSlash = strrchr(p, U_FILE_SEP_CHAR); 1512f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (pBackSlash != NULL) { 1513f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *pBackSlash = 0; /* Truncate the string at the '\' */ 1514f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1515f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1516f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1517f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (pBackSlash != NULL) { 1518f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) /* We found and truncated three names from the path. 1519f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Now append "source\data" and set the environment 1520f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */ 1521f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) strcpy(pBackSlash, U_FILE_SEP_STRING "data" U_FILE_SEP_STRING ); 1522f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) fgDataDir = p; 1523f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1524f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) else { 1525f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) /* __FILE__ on MSVC7 does not contain the directory */ 1526f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) FILE *file = fopen(".."U_FILE_SEP_STRING".."U_FILE_SEP_STRING "data" U_FILE_SEP_STRING "Makefile.in", "r"); 1527f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (file) { 1528f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) fclose(file); 1529f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) fgDataDir = ".."U_FILE_SEP_STRING".."U_FILE_SEP_STRING "data" U_FILE_SEP_STRING; 1530f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1531f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) else { 1532f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) fgDataDir = ".."U_FILE_SEP_STRING".."U_FILE_SEP_STRING".."U_FILE_SEP_STRING".."U_FILE_SEP_STRING "data" U_FILE_SEP_STRING; 1533f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1534f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1535f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1536f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#endif 1537f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1538f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return fgDataDir; 1539f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1540f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 1541f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1542f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/* 1543f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * This is a variant of cintltst/ccolltst.c:CharsToUChars(). 1544f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * It converts an invariant-character string into a UnicodeString, with 1545f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * unescaping \u sequences. 1546f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */ 1547f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)UnicodeString CharsToUnicodeString(const char* chars){ 1548f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return UnicodeString(chars, -1, US_INV).unescape(); 1549f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 1550f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1551f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)UnicodeString ctou(const char* chars) { 1552f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return CharsToUnicodeString(chars); 1553f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 1554f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1555f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#define RAND_M (714025) 1556f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#define RAND_IA (1366) 1557f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#define RAND_IC (150889) 1558f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1559f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static int32_t RAND_SEED; 1560f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1561f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/** 1562f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Returns a uniform random value x, with 0.0 <= x < 1.0. Use 1563f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * with care: Does not return all possible values; returns one of 1564f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * 714,025 values, uniformly spaced. However, the period is 1565f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * effectively infinite. See: Numerical Recipes, section 7.1. 1566f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * 1567f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param seedp pointer to seed. Set *seedp to any negative value 1568f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * to restart the sequence. 1569f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */ 1570f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)float IntlTest::random(int32_t* seedp) { 1571f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) static int32_t iy, ir[98]; 1572f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) static UBool first=TRUE; 1573f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) int32_t j; 1574f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (*seedp < 0 || first) { 1575f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) first = FALSE; 1576f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if ((*seedp=(RAND_IC-(*seedp)) % RAND_M) < 0) *seedp = -(*seedp); 1577f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) for (j=1;j<=97;++j) { 1578f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *seedp=(RAND_IA*(*seedp)+RAND_IC) % RAND_M; 1579f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) ir[j]=(*seedp); 1580f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1581f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *seedp=(RAND_IA*(*seedp)+RAND_IC) % RAND_M; 1582f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) iy=(*seedp); 1583f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1584f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) j=(int32_t)(1 + 97.0*iy/RAND_M); 1585f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) U_ASSERT(j>=1 && j<=97); 1586f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) iy=ir[j]; 1587f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *seedp=(RAND_IA*(*seedp)+RAND_IC) % RAND_M; 1588f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) ir[j]=(*seedp); 1589f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return (float) iy/RAND_M; 1590f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 1591f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1592f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/** 1593f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Convenience method using a global seed. 1594f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */ 1595f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)float IntlTest::random() { 1596f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return random(&RAND_SEED); 1597f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 1598f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1599f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static inline UChar toHex(int32_t i) { 1600f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return (UChar)(i + (i < 10 ? 0x30 : (0x41 - 10))); 1601f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 1602f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1603f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static UnicodeString& escape(const UnicodeString& s, UnicodeString& result) { 1604f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) for (int32_t i=0; i<s.length(); ++i) { 1605f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UChar c = s[i]; 1606f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (c <= (UChar)0x7F) { 1607f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) result += c; 1608f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } else { 1609f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) result += (UChar)0x5c; 1610f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) result += (UChar)0x75; 1611f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) result += toHex((c >> 12) & 0xF); 1612f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) result += toHex((c >> 8) & 0xF); 1613f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) result += toHex((c >> 4) & 0xF); 1614f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) result += toHex( c & 0xF); 1615f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1616f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1617f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return result; 1618f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 1619f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1620f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#define VERBOSE_ASSERTIONS 1621f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1622f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)UBool IntlTest::assertTrue(const char* message, UBool condition, UBool quiet, UBool possibleDataError) { 1623f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (!condition) { 1624f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (possibleDataError) { 1625f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) dataerrln("FAIL: assertTrue() failed: %s", message); 1626f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } else { 1627f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("FAIL: assertTrue() failed: %s", message); 1628f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1629f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } else if (!quiet) { 1630f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) logln("Ok: %s", message); 1631f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1632f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return condition; 1633f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 1634f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1635f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)UBool IntlTest::assertFalse(const char* message, UBool condition, UBool quiet) { 1636f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (condition) { 1637f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("FAIL: assertFalse() failed: %s", message); 1638f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } else if (!quiet) { 1639f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) logln("Ok: %s", message); 1640f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1641f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return !condition; 1642f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 1643f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1644f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)UBool IntlTest::assertSuccess(const char* message, UErrorCode ec, UBool possibleDataError) { 1645f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (U_FAILURE(ec)) { 1646f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (possibleDataError) { 1647f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) dataerrln("FAIL: %s (%s)", message, u_errorName(ec)); 1648f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } else { 1649f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errcheckln(ec, "FAIL: %s (%s)", message, u_errorName(ec)); 1650f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1651f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1652f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return FALSE; 1653f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1654f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return TRUE; 1655f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 1656f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1657f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)UBool IntlTest::assertEquals(const char* message, 1658f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) const UnicodeString& expected, 1659f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) const UnicodeString& actual, 1660f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UBool possibleDataError) { 1661f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (expected != actual) { 1662f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (possibleDataError) { 1663f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) dataerrln((UnicodeString)"FAIL: " + message + "; got " + 1664f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) prettify(actual) + 1665f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "; expected " + prettify(expected)); 1666f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } else { 1667f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln((UnicodeString)"FAIL: " + message + "; got " + 1668f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) prettify(actual) + 1669f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "; expected " + prettify(expected)); 1670f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1671f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return FALSE; 1672f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1673f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#ifdef VERBOSE_ASSERTIONS 1674f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) else { 1675f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) logln((UnicodeString)"Ok: " + message + "; got " + prettify(actual)); 1676f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1677f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#endif 1678f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return TRUE; 1679f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 1680f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1681f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)UBool IntlTest::assertEquals(const char* message, 1682f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) const char* expected, 1683f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) const char* actual) { 1684f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (uprv_strcmp(expected, actual) != 0) { 1685f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln((UnicodeString)"FAIL: " + message + "; got \"" + 1686f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) actual + 1687f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "\"; expected \"" + expected + "\""); 1688f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return FALSE; 1689f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1690f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#ifdef VERBOSE_ASSERTIONS 1691f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) else { 1692f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) logln((UnicodeString)"Ok: " + message + "; got \"" + actual + "\""); 1693f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1694f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#endif 1695f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return TRUE; 1696f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 1697f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1698f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#if !UCONFIG_NO_FORMATTING 1699f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)UBool IntlTest::assertEquals(const char* message, 1700f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) const Formattable& expected, 1701f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) const Formattable& actual) { 1702f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (expected != actual) { 1703f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln((UnicodeString)"FAIL: " + message + "; got " + 1704f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) toString(actual) + 1705f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "; expected " + toString(expected)); 1706f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return FALSE; 1707f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1708f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#ifdef VERBOSE_ASSERTIONS 1709f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) else { 1710f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) logln((UnicodeString)"Ok: " + message + "; got " + toString(actual)); 1711f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1712f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#endif 1713f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return TRUE; 1714f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 1715f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#endif 1716f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1717f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static char ASSERT_BUF[256]; 1718f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1719f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static const char* extractToAssertBuf(const UnicodeString& message) { 1720f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UnicodeString buf; 1721f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) escape(message, buf); 1722f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) buf.extract(0, 0x7FFFFFFF, ASSERT_BUF, sizeof(ASSERT_BUF)-1, 0); 1723f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) ASSERT_BUF[sizeof(ASSERT_BUF)-1] = 0; 1724f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return ASSERT_BUF; 1725f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 1726f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1727f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)UBool IntlTest::assertTrue(const UnicodeString& message, UBool condition, UBool quiet) { 1728f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return assertTrue(extractToAssertBuf(message), condition, quiet); 1729f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 1730f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1731f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)UBool IntlTest::assertFalse(const UnicodeString& message, UBool condition, UBool quiet) { 1732f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return assertFalse(extractToAssertBuf(message), condition, quiet); 1733f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 1734f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1735f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)UBool IntlTest::assertSuccess(const UnicodeString& message, UErrorCode ec) { 1736f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return assertSuccess(extractToAssertBuf(message), ec); 1737f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 1738f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1739f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)UBool IntlTest::assertEquals(const UnicodeString& message, 1740f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) const UnicodeString& expected, 1741f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) const UnicodeString& actual) { 1742f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return assertEquals(extractToAssertBuf(message), expected, actual); 1743f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 1744f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1745f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)UBool IntlTest::assertEquals(const UnicodeString& message, 1746f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) const char* expected, 1747f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) const char* actual) { 1748f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return assertEquals(extractToAssertBuf(message), expected, actual); 1749f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 1750f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)//-------------------------------------------------------------------- 1751f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)// Time bomb - allows temporary behavior that expires at a given 1752f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)// release 1753f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)//-------------------------------------------------------------------- 1754f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1755f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)UBool IntlTest::isICUVersionAtLeast(const UVersionInfo x) { 1756f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UVersionInfo v; 1757f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) u_getVersion(v); 1758f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return (uprv_memcmp(v, x, U_MAX_VERSION_LENGTH) >= 0); 1759f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 1760f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1761f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#if !UCONFIG_NO_FORMATTING 1762f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)UBool IntlTest::assertEquals(const UnicodeString& message, 1763f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) const Formattable& expected, 1764f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) const Formattable& actual) { 1765f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return assertEquals(extractToAssertBuf(message), expected, actual); 1766f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 1767f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#endif 1768f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1769f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)void IntlTest::setProperty(const char* propline) { 1770f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (numProps < kMaxProps) { 1771f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) proplines[numProps] = propline; 1772f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1773f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) numProps++; 1774f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 1775f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1776f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)const char* IntlTest::getProperty(const char* prop) { 1777f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) const char* val = NULL; 1778f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) for (int32_t i = 0; i < numProps; i++) { 1779f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) int32_t plen = uprv_strlen(prop); 1780f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if ((int32_t)uprv_strlen(proplines[i]) > plen + 1 1781f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) && proplines[i][plen] == '=' 1782f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) && uprv_strncmp(proplines[i], prop, plen) == 0) { 1783f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) val = &(proplines[i][plen+1]); 1784f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) break; 1785f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1786f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1787f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return val; 1788f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 1789f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1790f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/* 1791f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Hey, Emacs, please set the following: 1792f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * 1793f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Local Variables: 1794f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * indent-tabs-mode: nil 1795f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * End: 1796f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * 1797f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */ 1798