1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/******************************************************************** 2b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * COPYRIGHT: 38393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius * Copyright (c) 1997-2012, International Business Machines Corporation and 4b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * others. All Rights Reserved. 5b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ********************************************************************/ 6b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 7b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 8b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 9b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * IntlTestUtilities is the medium level test class for everything in the directory "utility". 10b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 11b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 12b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/utypes.h" 13b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru#include "unicode/errorcode.h" 1450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include "unicode/localpointer.h" 15b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "itutil.h" 16b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "strtest.h" 17b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "loctest.h" 18b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "citrtest.h" 19b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "ustrtest.h" 20b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "ucdtest.h" 21b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "restest.h" 22b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "restsnew.h" 23b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "tsmthred.h" 24b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "tsputil.h" 25b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "uobjtest.h" 26b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "utxttest.h" 27b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "v32test.h" 28b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "uvectest.h" 29b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "aliastst.h" 30b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "usettest.h" 31c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 32b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehoextern IntlTest *createBytesTrieTest(); 3350294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehostatic IntlTest *createLocalPointerTest(); 34b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehoextern IntlTest *createUCharsTrieTest(); 358393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Corneliusstatic IntlTest *createEnumSetTest(); 36b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 37b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define CASE(id, test) case id: \ 38b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru name = #test; \ 39b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (exec) { \ 40b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(#test "---"); logln(); \ 41b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test t; \ 42b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru callTest(t, par); \ 43b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } \ 44b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break 45b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 46b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid IntlTestUtilities::runIndexedTest( int32_t index, UBool exec, const char* &name, char* par ) 47b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 48b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (exec) logln("TestSuite Utilities: "); 49b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru switch (index) { 5027f654740f2a26ad62a5c155af9199af9e69b889claireho CASE(0, MultithreadTest); 5127f654740f2a26ad62a5c155af9199af9e69b889claireho CASE(1, StringTest); 5227f654740f2a26ad62a5c155af9199af9e69b889claireho CASE(2, UnicodeStringTest); 5327f654740f2a26ad62a5c155af9199af9e69b889claireho CASE(3, LocaleTest); 5427f654740f2a26ad62a5c155af9199af9e69b889claireho CASE(4, CharIterTest); 5527f654740f2a26ad62a5c155af9199af9e69b889claireho CASE(5, UObjectTest); 5627f654740f2a26ad62a5c155af9199af9e69b889claireho CASE(6, UnicodeTest); 5727f654740f2a26ad62a5c155af9199af9e69b889claireho CASE(7, ResourceBundleTest); 5827f654740f2a26ad62a5c155af9199af9e69b889claireho CASE(8, NewResourceBundleTest); 5927f654740f2a26ad62a5c155af9199af9e69b889claireho CASE(9, PUtilTest); 6027f654740f2a26ad62a5c155af9199af9e69b889claireho CASE(10, UVector32Test); 6127f654740f2a26ad62a5c155af9199af9e69b889claireho CASE(11, UVectorTest); 6227f654740f2a26ad62a5c155af9199af9e69b889claireho CASE(12, UTextTest); 6327f654740f2a26ad62a5c155af9199af9e69b889claireho CASE(13, LocaleAliasTest); 64b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru CASE(14, UnicodeSetTest); 65b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru CASE(15, ErrorCodeTest); 6650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho case 16: 6750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho name = "LocalPointerTest"; 6850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (exec) { 6950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho logln("TestSuite LocalPointerTest---"); logln(); 7050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho LocalPointer<IntlTest> test(createLocalPointerTest()); 7150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho callTest(*test, par); 7250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 7350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho break; 74b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho case 17: 75b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho name = "BytesTrieTest"; 76b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (exec) { 77b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho logln("TestSuite BytesTrieTest---"); logln(); 78b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho LocalPointer<IntlTest> test(createBytesTrieTest()); 79b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho callTest(*test, par); 80b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 81b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho break; 82b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho case 18: 83b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho name = "UCharsTrieTest"; 84b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (exec) { 85b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho logln("TestSuite UCharsTrieTest---"); logln(); 86b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho LocalPointer<IntlTest> test(createUCharsTrieTest()); 87b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho callTest(*test, par); 88b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 89b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho break; 908393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius case 19: 918393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius name = "EnumSetTest"; 928393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius if (exec) { 938393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius logln("TestSuite EnumSetTest---"); logln(); 948393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius LocalPointer<IntlTest> test(createEnumSetTest()); 958393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius callTest(*test, par); 968393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius } 978393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius break; 98b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru default: name = ""; break; //needed to end loop 99b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 102b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruvoid ErrorCodeTest::runIndexedTest(int32_t index, UBool exec, const char* &name, char* /*par*/) { 103b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (exec) logln("TestSuite Utilities: "); 104b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru switch (index) { 105b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru case 0: name = "TestErrorCode"; if (exec) TestErrorCode(); break; 106b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru case 1: name = "TestSubclass"; if (exec) TestSubclass(); break; 107b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru default: name = ""; break; //needed to end loop 108b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 109b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru} 110b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 111b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querustatic void RefPlusOne(UErrorCode &code) { code=(UErrorCode)(code+1); } 112b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querustatic void PtrPlusTwo(UErrorCode *code) { *code=(UErrorCode)(*code+2); } 113b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 114b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruvoid ErrorCodeTest::TestErrorCode() { 115b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru ErrorCode errorCode; 116b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if(errorCode.get()!=U_ZERO_ERROR || !errorCode.isSuccess() || errorCode.isFailure()) { 117b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln("ErrorCode did not initialize properly"); 118b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru return; 119b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 12050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errorCode.assertSuccess(); 12150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if(errorCode.errorName()!=u_errorName(U_ZERO_ERROR)) { 12250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errln("ErrorCode did not format error message string properly"); 12350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 124b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru RefPlusOne(errorCode); 125b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if(errorCode.get()!=U_ILLEGAL_ARGUMENT_ERROR || errorCode.isSuccess() || !errorCode.isFailure()) { 126b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln("ErrorCode did not yield a writable reference"); 127b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 128b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru PtrPlusTwo(errorCode); 129b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if(errorCode.get()!=U_INVALID_FORMAT_ERROR || errorCode.isSuccess() || !errorCode.isFailure()) { 130b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln("ErrorCode did not yield a writable pointer"); 131b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 132b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errorCode.set(U_PARSE_ERROR); 133b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if(errorCode.get()!=U_PARSE_ERROR || errorCode.isSuccess() || !errorCode.isFailure()) { 134b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln("ErrorCode.set() failed"); 135b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 136b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if( errorCode.reset()!=U_PARSE_ERROR || errorCode.get()!=U_ZERO_ERROR || 137b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru !errorCode.isSuccess() || errorCode.isFailure() 138b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru ) { 139b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln("ErrorCode did not reset properly"); 140b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 141b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru} 142b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 143b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruclass MyErrorCode: public ErrorCode { 144b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querupublic: 145b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru MyErrorCode(int32_t &countChecks, int32_t &countDests) 146b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru : checks(countChecks), dests(countDests) {} 147b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru ~MyErrorCode() { 148b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if(isFailure()) { 149b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru ++dests; 150b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 151b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 152b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruprivate: 153b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru virtual void handleFailure() const { 154b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru ++checks; 155b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 156b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru int32_t &checks; 157b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru int32_t &dests; 158b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru}; 159b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 160b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruvoid ErrorCodeTest::TestSubclass() { 161b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru int32_t countChecks=0; 162b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru int32_t countDests=0; 163b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru { 164b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru MyErrorCode errorCode(countChecks, countDests); 165b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if( errorCode.get()!=U_ZERO_ERROR || !errorCode.isSuccess() || errorCode.isFailure() || 166b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru countChecks!=0 || countDests!=0 167b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru ) { 168b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln("ErrorCode did not initialize properly"); 169b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru return; 170b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 17150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errorCode.assertSuccess(); 172b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if(countChecks!=0) { 17350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errln("ErrorCode.assertSuccess() called handleFailure() despite success"); 174b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 175b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru RefPlusOne(errorCode); 176b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if(errorCode.get()!=U_ILLEGAL_ARGUMENT_ERROR || errorCode.isSuccess() || !errorCode.isFailure()) { 177b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln("ErrorCode did not yield a writable reference"); 178b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 17950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errorCode.assertSuccess(); 180b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if(countChecks!=1) { 18150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errln("ErrorCode.assertSuccess() did not handleFailure()"); 182b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 183b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru PtrPlusTwo(errorCode); 184b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if(errorCode.get()!=U_INVALID_FORMAT_ERROR || errorCode.isSuccess() || !errorCode.isFailure()) { 185b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln("ErrorCode did not yield a writable pointer"); 186b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 18750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errorCode.assertSuccess(); 188b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if(countChecks!=2) { 18950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errln("ErrorCode.assertSuccess() did not handleFailure()"); 190b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 191b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errorCode.set(U_PARSE_ERROR); 192b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if(errorCode.get()!=U_PARSE_ERROR || errorCode.isSuccess() || !errorCode.isFailure()) { 193b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln("ErrorCode.set() failed"); 194b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 195b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if( errorCode.reset()!=U_PARSE_ERROR || errorCode.get()!=U_ZERO_ERROR || 196b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru !errorCode.isSuccess() || errorCode.isFailure() 197b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru ) { 198b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln("ErrorCode did not reset properly"); 199b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 20050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errorCode.assertSuccess(); 201b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if(countChecks!=2) { 20250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errln("ErrorCode.assertSuccess() called handleFailure() despite success"); 203b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 204b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 205b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if(countDests!=0) { 20650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errln("MyErrorCode destructor detected failure despite success"); 207b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 208b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru countChecks=countDests=0; 209b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru { 210b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru MyErrorCode errorCode(countChecks, countDests); 211b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errorCode.set(U_PARSE_ERROR); 212b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 213b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if(countDests!=1) { 21450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errln("MyErrorCode destructor failed to detect failure"); 21550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 21650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 21750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 21850294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoclass LocalPointerTest : public IntlTest { 21950294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehopublic: 22050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho LocalPointerTest() {} 22150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 22250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par=NULL); 22350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 22450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho void TestLocalPointer(); 22550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho void TestLocalArray(); 22650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho void TestLocalXyzPointer(); 22750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho void TestLocalXyzPointerNull(); 22850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}; 22950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 23050294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehostatic IntlTest *createLocalPointerTest() { 23150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return new LocalPointerTest(); 23250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 23350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 23450294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid LocalPointerTest::runIndexedTest(int32_t index, UBool exec, const char *&name, char * /*par*/) { 23550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if(exec) { 23650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho logln("TestSuite LocalPointerTest: "); 237b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 23850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho switch (index) { 23950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho TESTCASE(0, TestLocalPointer); 24050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho TESTCASE(1, TestLocalArray); 24150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho TESTCASE(2, TestLocalXyzPointer); 24250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho TESTCASE(3, TestLocalXyzPointerNull); 24350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho default: 24450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho name=""; 24550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho break; // needed to end the loop 24650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 24750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 24850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 24950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho// Exercise every LocalPointer and LocalPointerBase method. 25050294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid LocalPointerTest::TestLocalPointer() { 25150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // constructor 25250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho LocalPointer<UnicodeString> s(new UnicodeString((UChar32)0x50005)); 25350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // isNULL(), isValid(), operator==(), operator!=() 25450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if(s.isNull() || !s.isValid() || s==NULL || !(s!=NULL)) { 25550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errln("LocalPointer constructor or NULL test failure"); 25650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return; 25750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 25850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // getAlias(), operator->, operator* 25950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if(s.getAlias()->length()!=2 || s->length()!=2 || (*s).length()!=2) { 26050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errln("LocalPointer access failure"); 26150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 26250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // adoptInstead(), orphan() 26350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho s.adoptInstead(new UnicodeString((UChar)0xfffc)); 26450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if(s->length()!=1) { 26550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errln("LocalPointer adoptInstead(U+FFFC) failure"); 26650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 26750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString *orphan=s.orphan(); 26850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if(orphan==NULL || orphan->length()!=1 || s.isValid() || s!=NULL) { 26950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errln("LocalPointer orphan() failure"); 27050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 27150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho delete orphan; 27250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // destructor 27350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho s.adoptInstead(new UnicodeString()); 27450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if(s->length()!=0) { 27550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errln("LocalPointer adoptInstead(empty) failure"); 27650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 27750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 27850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 27950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho// Exercise every LocalArray method (but not LocalPointerBase). 28050294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid LocalPointerTest::TestLocalArray() { 28150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // constructor 28250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho LocalArray<UnicodeString> a(new UnicodeString[2]); 28350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // operator[]() 28450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho a[0].append((UChar)0x61); 28550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho a[1].append((UChar32)0x60006); 28650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if(a[0].length()!=1 || a[1].length()!=2) { 28750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errln("LocalArray access failure"); 28850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 28950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // adoptInstead() 29050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho a.adoptInstead(new UnicodeString[4]); 29150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho a[3].append((UChar)0x62).append((UChar)0x63).reverse(); 29250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if(a[3].length()!=2 || a[3][1]!=0x62) { 29350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errln("LocalArray adoptInstead() failure"); 29450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 29550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // destructor 29650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 29750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 29850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include "unicode/ucnvsel.h" 29950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include "unicode/ucal.h" 30050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include "unicode/udatpg.h" 30127f654740f2a26ad62a5c155af9199af9e69b889claireho#include "unicode/uidna.h" 30250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include "unicode/uldnames.h" 30350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include "unicode/umsg.h" 30450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include "unicode/unorm2.h" 30550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include "unicode/uregex.h" 30650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include "unicode/utrans.h" 30750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 30850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho// Use LocalXyzPointer types that are not covered elsewhere in the intltest suite. 30950294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid LocalPointerTest::TestLocalXyzPointer() { 31050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho IcuTestErrorCode errorCode(*this, "TestLocalXyzPointer"); 31150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 31250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho static const char *const encoding="ISO-8859-1"; 31350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho LocalUConverterSelectorPointer sel( 31450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ucnvsel_open(&encoding, 1, NULL, UCNV_ROUNDTRIP_SET, errorCode)); 31550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if(errorCode.logIfFailureAndReset("ucnvsel_open()")) { 31650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return; 31750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 31850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if(sel.isNull()) { 31950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errln("LocalUConverterSelectorPointer failure"); 32050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return; 32150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 32250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 32350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#if !UCONFIG_NO_FORMATTING 32450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho LocalUCalendarPointer cal(ucal_open(NULL, 0, "root", UCAL_GREGORIAN, errorCode)); 32550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if(errorCode.logDataIfFailureAndReset("ucal_open()")) { 32650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return; 32750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 32850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if(cal.isNull()) { 32950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errln("LocalUCalendarPointer failure"); 33050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return; 33150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 33250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 33350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho LocalUDateTimePatternGeneratorPointer patgen(udatpg_open("root", errorCode)); 334b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if(errorCode.logDataIfFailureAndReset("udatpg_open()")) { 33550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return; 33650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 33750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if(patgen.isNull()) { 33850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errln("LocalUDateTimePatternGeneratorPointer failure"); 33950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return; 34050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 34150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 34250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho LocalULocaleDisplayNamesPointer ldn(uldn_open("de-CH", ULDN_STANDARD_NAMES, errorCode)); 34350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if(errorCode.logIfFailureAndReset("uldn_open()")) { 34450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return; 34550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 34650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if(ldn.isNull()) { 34750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errln("LocalULocaleDisplayNamesPointer failure"); 34850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return; 34950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 35050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 35150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString hello=UNICODE_STRING_SIMPLE("Hello {0}!"); 35250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho LocalUMessageFormatPointer msg( 35350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho umsg_open(hello.getBuffer(), hello.length(), "root", NULL, errorCode)); 35450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if(errorCode.logIfFailureAndReset("umsg_open()")) { 35550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return; 35650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 35750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if(msg.isNull()) { 35850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errln("LocalUMessageFormatPointer failure"); 35950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return; 36050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 36150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#endif /* UCONFIG_NO_FORMATTING */ 36250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 36350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#if !UCONFIG_NO_NORMALIZATION 364103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius const UNormalizer2 *nfc=unorm2_getNFCInstance(errorCode); 36550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeSet emptySet; 36650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho LocalUNormalizer2Pointer fn2(unorm2_openFiltered(nfc, emptySet.toUSet(), errorCode)); 36750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if(errorCode.logIfFailureAndReset("unorm2_openFiltered()")) { 36850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return; 36950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 37050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if(fn2.isNull()) { 37150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errln("LocalUNormalizer2Pointer failure"); 37250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return; 37350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 37450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#endif /* !UCONFIG_NO_NORMALIZATION */ 37550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 37627f654740f2a26ad62a5c155af9199af9e69b889claireho#if !UCONFIG_NO_IDNA 37727f654740f2a26ad62a5c155af9199af9e69b889claireho LocalUIDNAPointer idna(uidna_openUTS46(0, errorCode)); 37827f654740f2a26ad62a5c155af9199af9e69b889claireho if(errorCode.logIfFailureAndReset("uidna_openUTS46()")) { 37927f654740f2a26ad62a5c155af9199af9e69b889claireho return; 38027f654740f2a26ad62a5c155af9199af9e69b889claireho } 38127f654740f2a26ad62a5c155af9199af9e69b889claireho if(idna.isNull()) { 38227f654740f2a26ad62a5c155af9199af9e69b889claireho errln("LocalUIDNAPointer failure"); 38327f654740f2a26ad62a5c155af9199af9e69b889claireho return; 38427f654740f2a26ad62a5c155af9199af9e69b889claireho } 38527f654740f2a26ad62a5c155af9199af9e69b889claireho#endif /* !UCONFIG_NO_IDNA */ 38627f654740f2a26ad62a5c155af9199af9e69b889claireho 38750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#if !UCONFIG_NO_REGULAR_EXPRESSIONS 38850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString pattern=UNICODE_STRING_SIMPLE("abc|xy+z"); 38950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho LocalURegularExpressionPointer regex( 39050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho uregex_open(pattern.getBuffer(), pattern.length(), 0, NULL, errorCode)); 39150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if(errorCode.logIfFailureAndReset("uregex_open()")) { 39250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return; 39350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 39450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if(regex.isNull()) { 39550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errln("LocalURegularExpressionPointer failure"); 39650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return; 39750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 39850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#endif /* UCONFIG_NO_REGULAR_EXPRESSIONS */ 39950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 40050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#if !UCONFIG_NO_TRANSLITERATION 40150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString id=UNICODE_STRING_SIMPLE("Grek-Latn"); 40250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho LocalUTransliteratorPointer trans( 40350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho utrans_openU(id.getBuffer(), id.length(), UTRANS_FORWARD, NULL, 0, NULL, errorCode)); 40450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if(errorCode.logIfFailureAndReset("utrans_open()")) { 40550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return; 40650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 40750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if(trans.isNull()) { 40850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errln("LocalUTransliteratorPointer failure"); 40950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return; 41050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 41150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#endif /* !UCONFIG_NO_TRANSLITERATION */ 41250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 41350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // destructors 41450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 41550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 41650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho// Try LocalXyzPointer types with NULL pointers. 41750294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid LocalPointerTest::TestLocalXyzPointerNull() { 41850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { 41950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho IcuTestErrorCode errorCode(*this, "TestLocalXyzPointerNull/LocalUConverterSelectorPointer"); 42050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho static const char *const encoding="ISO-8859-1"; 42150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho LocalUConverterSelectorPointer null; 42250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho LocalUConverterSelectorPointer sel( 42350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ucnvsel_open(&encoding, 1, NULL, UCNV_ROUNDTRIP_SET, errorCode)); 42450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho sel.adoptInstead(NULL); 42550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 42650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#if !UCONFIG_NO_FORMATTING 42750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { 42850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho IcuTestErrorCode errorCode(*this, "TestLocalXyzPointerNull/LocalUCalendarPointer"); 42950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho LocalUCalendarPointer null; 43050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho LocalUCalendarPointer cal(ucal_open(NULL, 0, "root", UCAL_GREGORIAN, errorCode)); 43150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if(!errorCode.logDataIfFailureAndReset("ucal_open()")) { 43250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho cal.adoptInstead(NULL); 43350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 43450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 43550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { 43650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho IcuTestErrorCode errorCode(*this, "TestLocalXyzPointerNull/LocalUDateTimePatternGeneratorPointer"); 43750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho LocalUDateTimePatternGeneratorPointer null; 43850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho LocalUDateTimePatternGeneratorPointer patgen(udatpg_open("root", errorCode)); 43950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho patgen.adoptInstead(NULL); 44050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 44150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { 44250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho IcuTestErrorCode errorCode(*this, "TestLocalXyzPointerNull/LocalUMessageFormatPointer"); 44350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString hello=UNICODE_STRING_SIMPLE("Hello {0}!"); 44450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho LocalUMessageFormatPointer null; 44550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho LocalUMessageFormatPointer msg( 44650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho umsg_open(hello.getBuffer(), hello.length(), "root", NULL, errorCode)); 44750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho msg.adoptInstead(NULL); 44850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 44950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#endif /* !UCONFIG_NO_FORMATTING */ 45050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 45150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#if !UCONFIG_NO_REGULAR_EXPRESSIONS 45250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { 45350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho IcuTestErrorCode errorCode(*this, "TestLocalXyzPointerNull/LocalURegularExpressionPointer"); 45450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString pattern=UNICODE_STRING_SIMPLE("abc|xy+z"); 45550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho LocalURegularExpressionPointer null; 45650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho LocalURegularExpressionPointer regex( 45750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho uregex_open(pattern.getBuffer(), pattern.length(), 0, NULL, errorCode)); 45850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if(!errorCode.logDataIfFailureAndReset("urege_open()")) { 45950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho regex.adoptInstead(NULL); 46050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 46150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 46250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#endif /* !UCONFIG_NO_REGULAR_EXPRESSIONS */ 46350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 46450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#if !UCONFIG_NO_TRANSLITERATION 46550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { 46650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho IcuTestErrorCode errorCode(*this, "TestLocalXyzPointerNull/LocalUTransliteratorPointer"); 46750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString id=UNICODE_STRING_SIMPLE("Grek-Latn"); 46850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho LocalUTransliteratorPointer null; 46950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho LocalUTransliteratorPointer trans( 47050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho utrans_openU(id.getBuffer(), id.length(), UTRANS_FORWARD, NULL, 0, NULL, errorCode)); 47150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if(!errorCode.logDataIfFailureAndReset("utrans_openU()")) { 47250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho trans.adoptInstead(NULL); 47350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 47450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 47550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#endif /* !UCONFIG_NO_TRANSLITERATION */ 47650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 477b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru} 4788393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 4798393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius/** EnumSet test **/ 4808393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius#include "unicode/enumset.h" 4818393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 4828393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Corneliusclass EnumSetTest : public IntlTest { 4838393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Corneliuspublic: 4848393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius EnumSetTest() {} 4858393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius virtual void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par=NULL); 4868393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius void TestEnumSet(); 4878393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius}; 4888393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 4898393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Corneliusstatic IntlTest *createEnumSetTest() { 4908393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius return new EnumSetTest(); 4918393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius} 4928393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 4938393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Corneliusvoid EnumSetTest::runIndexedTest(int32_t index, UBool exec, const char *&name, char * /*par*/) { 4948393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO_BEGIN; 4958393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestEnumSet); 4968393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO_END; 4978393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius} 4988393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Corneliusenum myEnum { 4998393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius MAX_NONBOOLEAN=-1, 5008393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius THING1, 5018393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius THING2, 5028393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius THING3, 5038393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius LIMIT_BOOLEAN 5048393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius}; 5058393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 5068393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Corneliusvoid EnumSetTest::TestEnumSet() { 5078393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius EnumSet<myEnum, 5088393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius MAX_NONBOOLEAN+1, 5098393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius LIMIT_BOOLEAN> 5108393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius flags; 5118393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 5128393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius logln("Enum is from [%d..%d]\n", MAX_NONBOOLEAN+1, 5138393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius LIMIT_BOOLEAN); 5148393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 5158393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TEST_ASSERT_TRUE(flags.get(THING1) == FALSE); 5168393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TEST_ASSERT_TRUE(flags.get(THING2) == FALSE); 5178393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TEST_ASSERT_TRUE(flags.get(THING3) == FALSE); 5188393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 5198393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius logln("get(thing1)=%d, get(thing2)=%d, get(thing3)=%d\n", flags.get(THING1), flags.get(THING2), flags.get(THING3)); 5208393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius logln("Value now: %d\n", flags.getAll()); 5218393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius flags.clear(); 5228393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius logln("clear -Value now: %d\n", flags.getAll()); 5238393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius logln("get(thing1)=%d, get(thing2)=%d, get(thing3)=%d\n", flags.get(THING1), flags.get(THING2), flags.get(THING3)); 5248393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TEST_ASSERT_TRUE(flags.get(THING1) == FALSE); 5258393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TEST_ASSERT_TRUE(flags.get(THING2) == FALSE); 5268393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TEST_ASSERT_TRUE(flags.get(THING3) == FALSE); 5278393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius flags.add(THING1); 5288393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius logln("set THING1 -Value now: %d\n", flags.getAll()); 5298393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TEST_ASSERT_TRUE(flags.get(THING1) == TRUE); 5308393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TEST_ASSERT_TRUE(flags.get(THING2) == FALSE); 5318393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TEST_ASSERT_TRUE(flags.get(THING3) == FALSE); 5328393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius logln("get(thing1)=%d, get(thing2)=%d, get(thing3)=%d\n", flags.get(THING1), flags.get(THING2), flags.get(THING3)); 5338393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius flags.add(THING3); 5348393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius logln("set THING3 -Value now: %d\n", flags.getAll()); 5358393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TEST_ASSERT_TRUE(flags.get(THING1) == TRUE); 5368393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TEST_ASSERT_TRUE(flags.get(THING2) == FALSE); 5378393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TEST_ASSERT_TRUE(flags.get(THING3) == TRUE); 5388393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius logln("get(thing1)=%d, get(thing2)=%d, get(thing3)=%d\n", flags.get(THING1), flags.get(THING2), flags.get(THING3)); 5398393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius flags.remove(THING2); 5408393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TEST_ASSERT_TRUE(flags.get(THING1) == TRUE); 5418393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TEST_ASSERT_TRUE(flags.get(THING2) == FALSE); 5428393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TEST_ASSERT_TRUE(flags.get(THING3) == TRUE); 5438393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius logln("remove THING2 -Value now: %d\n", flags.getAll()); 5448393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius logln("get(thing1)=%d, get(thing2)=%d, get(thing3)=%d\n", flags.get(THING1), flags.get(THING2), flags.get(THING3)); 5458393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius flags.remove(THING1); 5468393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TEST_ASSERT_TRUE(flags.get(THING1) == FALSE); 5478393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TEST_ASSERT_TRUE(flags.get(THING2) == FALSE); 5488393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TEST_ASSERT_TRUE(flags.get(THING3) == TRUE); 5498393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius logln("remove THING1 -Value now: %d\n", flags.getAll()); 5508393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius logln("get(thing1)=%d, get(thing2)=%d, get(thing3)=%d\n", flags.get(THING1), flags.get(THING2), flags.get(THING3)); 5518393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 5528393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius flags.clear(); 5538393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius logln("clear -Value now: %d\n", flags.getAll()); 5548393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius logln("get(thing1)=%d, get(thing2)=%d, get(thing3)=%d\n", flags.get(THING1), flags.get(THING2), flags.get(THING3)); 5558393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TEST_ASSERT_TRUE(flags.get(THING1) == FALSE); 5568393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TEST_ASSERT_TRUE(flags.get(THING2) == FALSE); 5578393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TEST_ASSERT_TRUE(flags.get(THING3) == FALSE); 5588393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius} 559