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