itutil.cpp revision 27f654740f2a26ad62a5c155af9199af9e69b889
1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/********************************************************************
2b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * COPYRIGHT:
350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Copyright (c) 1997-2010, 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
3250294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehostatic IntlTest *createLocalPointerTest();
33b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
34b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define CASE(id, test) case id:                               \
35b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                          name = #test;                       \
36b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                          if (exec) {                         \
37b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                              logln(#test "---"); logln();    \
38b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                              test t;                         \
39b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                              callTest(t, par);               \
40b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                          }                                   \
41b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                          break
42b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
43b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid IntlTestUtilities::runIndexedTest( int32_t index, UBool exec, const char* &name, char* par )
44b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
45b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (exec) logln("TestSuite Utilities: ");
46b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    switch (index) {
4727f654740f2a26ad62a5c155af9199af9e69b889claireho        CASE(0, MultithreadTest);
4827f654740f2a26ad62a5c155af9199af9e69b889claireho        CASE(1, StringTest);
4927f654740f2a26ad62a5c155af9199af9e69b889claireho        CASE(2, UnicodeStringTest);
5027f654740f2a26ad62a5c155af9199af9e69b889claireho        CASE(3, LocaleTest);
5127f654740f2a26ad62a5c155af9199af9e69b889claireho        CASE(4, CharIterTest);
5227f654740f2a26ad62a5c155af9199af9e69b889claireho        CASE(5, UObjectTest);
5327f654740f2a26ad62a5c155af9199af9e69b889claireho        CASE(6, UnicodeTest);
5427f654740f2a26ad62a5c155af9199af9e69b889claireho        CASE(7, ResourceBundleTest);
5527f654740f2a26ad62a5c155af9199af9e69b889claireho        CASE(8, NewResourceBundleTest);
5627f654740f2a26ad62a5c155af9199af9e69b889claireho        CASE(9, PUtilTest);
5727f654740f2a26ad62a5c155af9199af9e69b889claireho        CASE(10, UVector32Test);
5827f654740f2a26ad62a5c155af9199af9e69b889claireho        CASE(11, UVectorTest);
5927f654740f2a26ad62a5c155af9199af9e69b889claireho        CASE(12, UTextTest);
6027f654740f2a26ad62a5c155af9199af9e69b889claireho        CASE(13, LocaleAliasTest);
61b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        CASE(14, UnicodeSetTest);
62b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        CASE(15, ErrorCodeTest);
6350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        case 16:
6450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            name = "LocalPointerTest";
6550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            if (exec) {
6650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                logln("TestSuite LocalPointerTest---"); logln();
6750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                LocalPointer<IntlTest> test(createLocalPointerTest());
6850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                callTest(*test, par);
6950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            }
7050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            break;
71b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        default: name = ""; break; //needed to end loop
72b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
73b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
74b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
75b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruvoid ErrorCodeTest::runIndexedTest(int32_t index, UBool exec, const char* &name, char* /*par*/) {
76b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    if (exec) logln("TestSuite Utilities: ");
77b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    switch (index) {
78b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        case 0: name = "TestErrorCode"; if (exec) TestErrorCode(); break;
79b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        case 1: name = "TestSubclass"; if (exec) TestSubclass(); break;
80b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        default: name = ""; break; //needed to end loop
81b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    }
82b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru}
83b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
84b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querustatic void RefPlusOne(UErrorCode &code) { code=(UErrorCode)(code+1); }
85b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querustatic void PtrPlusTwo(UErrorCode *code) { *code=(UErrorCode)(*code+2); }
86b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
87b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruvoid ErrorCodeTest::TestErrorCode() {
88b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    ErrorCode errorCode;
89b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    if(errorCode.get()!=U_ZERO_ERROR || !errorCode.isSuccess() || errorCode.isFailure()) {
90b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        errln("ErrorCode did not initialize properly");
91b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        return;
92b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    }
9350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    errorCode.assertSuccess();
9450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if(errorCode.errorName()!=u_errorName(U_ZERO_ERROR)) {
9550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        errln("ErrorCode did not format error message string properly");
9650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
97b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    RefPlusOne(errorCode);
98b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    if(errorCode.get()!=U_ILLEGAL_ARGUMENT_ERROR || errorCode.isSuccess() || !errorCode.isFailure()) {
99b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        errln("ErrorCode did not yield a writable reference");
100b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    }
101b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    PtrPlusTwo(errorCode);
102b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    if(errorCode.get()!=U_INVALID_FORMAT_ERROR || errorCode.isSuccess() || !errorCode.isFailure()) {
103b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        errln("ErrorCode did not yield a writable pointer");
104b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    }
105b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    errorCode.set(U_PARSE_ERROR);
106b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    if(errorCode.get()!=U_PARSE_ERROR || errorCode.isSuccess() || !errorCode.isFailure()) {
107b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        errln("ErrorCode.set() failed");
108b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    }
109b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    if( errorCode.reset()!=U_PARSE_ERROR || errorCode.get()!=U_ZERO_ERROR ||
110b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        !errorCode.isSuccess() || errorCode.isFailure()
111b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    ) {
112b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        errln("ErrorCode did not reset properly");
113b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    }
114b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru}
115b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
116b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruclass MyErrorCode: public ErrorCode {
117b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querupublic:
118b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    MyErrorCode(int32_t &countChecks, int32_t &countDests)
119b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        : checks(countChecks), dests(countDests) {}
120b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    ~MyErrorCode() {
121b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        if(isFailure()) {
122b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            ++dests;
123b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        }
124b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    }
125b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruprivate:
126b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    virtual void handleFailure() const {
127b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        ++checks;
128b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    }
129b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    int32_t &checks;
130b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    int32_t &dests;
131b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru};
132b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
133b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruvoid ErrorCodeTest::TestSubclass() {
134b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    int32_t countChecks=0;
135b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    int32_t countDests=0;
136b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    {
137b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        MyErrorCode errorCode(countChecks, countDests);
138b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        if( errorCode.get()!=U_ZERO_ERROR || !errorCode.isSuccess() || errorCode.isFailure() ||
139b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            countChecks!=0 || countDests!=0
140b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        ) {
141b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            errln("ErrorCode did not initialize properly");
142b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            return;
143b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        }
14450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        errorCode.assertSuccess();
145b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        if(countChecks!=0) {
14650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            errln("ErrorCode.assertSuccess() called handleFailure() despite success");
147b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        }
148b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        RefPlusOne(errorCode);
149b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        if(errorCode.get()!=U_ILLEGAL_ARGUMENT_ERROR || errorCode.isSuccess() || !errorCode.isFailure()) {
150b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            errln("ErrorCode did not yield a writable reference");
151b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        }
15250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        errorCode.assertSuccess();
153b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        if(countChecks!=1) {
15450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            errln("ErrorCode.assertSuccess() did not handleFailure()");
155b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        }
156b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        PtrPlusTwo(errorCode);
157b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        if(errorCode.get()!=U_INVALID_FORMAT_ERROR || errorCode.isSuccess() || !errorCode.isFailure()) {
158b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            errln("ErrorCode did not yield a writable pointer");
159b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        }
16050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        errorCode.assertSuccess();
161b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        if(countChecks!=2) {
16250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            errln("ErrorCode.assertSuccess() did not handleFailure()");
163b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        }
164b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        errorCode.set(U_PARSE_ERROR);
165b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        if(errorCode.get()!=U_PARSE_ERROR || errorCode.isSuccess() || !errorCode.isFailure()) {
166b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            errln("ErrorCode.set() failed");
167b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        }
168b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        if( errorCode.reset()!=U_PARSE_ERROR || errorCode.get()!=U_ZERO_ERROR ||
169b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            !errorCode.isSuccess() || errorCode.isFailure()
170b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        ) {
171b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            errln("ErrorCode did not reset properly");
172b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        }
17350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        errorCode.assertSuccess();
174b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        if(countChecks!=2) {
17550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            errln("ErrorCode.assertSuccess() called handleFailure() despite success");
176b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        }
177b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    }
178b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    if(countDests!=0) {
17950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        errln("MyErrorCode destructor detected failure despite success");
180b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    }
181b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    countChecks=countDests=0;
182b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    {
183b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        MyErrorCode errorCode(countChecks, countDests);
184b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        errorCode.set(U_PARSE_ERROR);
185b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    }
186b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    if(countDests!=1) {
18750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        errln("MyErrorCode destructor failed to detect failure");
18850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
18950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}
19050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
19150294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoclass LocalPointerTest : public IntlTest {
19250294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehopublic:
19350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    LocalPointerTest() {}
19450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
19550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par=NULL);
19650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
19750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    void TestLocalPointer();
19850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    void TestLocalArray();
19950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    void TestLocalXyzPointer();
20050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    void TestLocalXyzPointerNull();
20150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho};
20250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
20350294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehostatic IntlTest *createLocalPointerTest() {
20450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    return new LocalPointerTest();
20550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}
20650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
20750294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid LocalPointerTest::runIndexedTest(int32_t index, UBool exec, const char *&name, char * /*par*/) {
20850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if(exec) {
20950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        logln("TestSuite LocalPointerTest: ");
210b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    }
21150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    switch (index) {
21250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        TESTCASE(0, TestLocalPointer);
21350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        TESTCASE(1, TestLocalArray);
21450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        TESTCASE(2, TestLocalXyzPointer);
21550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        TESTCASE(3, TestLocalXyzPointerNull);
21650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        default:
21750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            name="";
21850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            break; // needed to end the loop
21950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
22050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}
22150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
22250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho// Exercise every LocalPointer and LocalPointerBase method.
22350294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid LocalPointerTest::TestLocalPointer() {
22450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    // constructor
22550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    LocalPointer<UnicodeString> s(new UnicodeString((UChar32)0x50005));
22650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    // isNULL(), isValid(), operator==(), operator!=()
22750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if(s.isNull() || !s.isValid() || s==NULL || !(s!=NULL)) {
22850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        errln("LocalPointer constructor or NULL test failure");
22950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        return;
23050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
23150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    // getAlias(), operator->, operator*
23250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if(s.getAlias()->length()!=2 || s->length()!=2 || (*s).length()!=2) {
23350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        errln("LocalPointer access failure");
23450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
23550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    // adoptInstead(), orphan()
23650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    s.adoptInstead(new UnicodeString((UChar)0xfffc));
23750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if(s->length()!=1) {
23850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        errln("LocalPointer adoptInstead(U+FFFC) failure");
23950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
24050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    UnicodeString *orphan=s.orphan();
24150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if(orphan==NULL || orphan->length()!=1 || s.isValid() || s!=NULL) {
24250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        errln("LocalPointer orphan() failure");
24350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
24450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    delete orphan;
24550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    // destructor
24650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    s.adoptInstead(new UnicodeString());
24750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if(s->length()!=0) {
24850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        errln("LocalPointer adoptInstead(empty) failure");
24950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
25050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}
25150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
25250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho// Exercise every LocalArray method (but not LocalPointerBase).
25350294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid LocalPointerTest::TestLocalArray() {
25450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    // constructor
25550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    LocalArray<UnicodeString> a(new UnicodeString[2]);
25650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    // operator[]()
25750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    a[0].append((UChar)0x61);
25850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    a[1].append((UChar32)0x60006);
25950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if(a[0].length()!=1 || a[1].length()!=2) {
26050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        errln("LocalArray access failure");
26150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
26250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    // adoptInstead()
26350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    a.adoptInstead(new UnicodeString[4]);
26450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    a[3].append((UChar)0x62).append((UChar)0x63).reverse();
26550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if(a[3].length()!=2 || a[3][1]!=0x62) {
26650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        errln("LocalArray adoptInstead() failure");
26750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
26850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    // destructor
26950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}
27050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
27150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include "unicode/ucnvsel.h"
27250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include "unicode/ucal.h"
27350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include "unicode/udatpg.h"
27427f654740f2a26ad62a5c155af9199af9e69b889claireho#include "unicode/uidna.h"
27550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include "unicode/uldnames.h"
27650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include "unicode/umsg.h"
27750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include "unicode/unorm2.h"
27850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include "unicode/uregex.h"
27950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include "unicode/utrans.h"
28050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
28150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho// Use LocalXyzPointer types that are not covered elsewhere in the intltest suite.
28250294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid LocalPointerTest::TestLocalXyzPointer() {
28350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    IcuTestErrorCode errorCode(*this, "TestLocalXyzPointer");
28450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
28550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    static const char *const encoding="ISO-8859-1";
28650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    LocalUConverterSelectorPointer sel(
28750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        ucnvsel_open(&encoding, 1, NULL, UCNV_ROUNDTRIP_SET, errorCode));
28850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if(errorCode.logIfFailureAndReset("ucnvsel_open()")) {
28950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        return;
29050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
29150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if(sel.isNull()) {
29250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        errln("LocalUConverterSelectorPointer failure");
29350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        return;
29450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
29550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
29650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#if !UCONFIG_NO_FORMATTING
29750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    LocalUCalendarPointer cal(ucal_open(NULL, 0, "root", UCAL_GREGORIAN, errorCode));
29850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if(errorCode.logDataIfFailureAndReset("ucal_open()")) {
29950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        return;
30050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
30150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if(cal.isNull()) {
30250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        errln("LocalUCalendarPointer failure");
30350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        return;
30450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
30550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
30650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    LocalUDateTimePatternGeneratorPointer patgen(udatpg_open("root", errorCode));
30750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if(errorCode.logIfFailureAndReset("udatpg_open()")) {
30850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        return;
30950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
31050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if(patgen.isNull()) {
31150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        errln("LocalUDateTimePatternGeneratorPointer failure");
31250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        return;
31350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
31450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
31550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    LocalULocaleDisplayNamesPointer ldn(uldn_open("de-CH", ULDN_STANDARD_NAMES, errorCode));
31650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if(errorCode.logIfFailureAndReset("uldn_open()")) {
31750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        return;
31850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
31950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if(ldn.isNull()) {
32050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        errln("LocalULocaleDisplayNamesPointer failure");
32150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        return;
32250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
32350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
32450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    UnicodeString hello=UNICODE_STRING_SIMPLE("Hello {0}!");
32550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    LocalUMessageFormatPointer msg(
32650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        umsg_open(hello.getBuffer(), hello.length(), "root", NULL, errorCode));
32750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if(errorCode.logIfFailureAndReset("umsg_open()")) {
32850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        return;
32950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
33050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if(msg.isNull()) {
33150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        errln("LocalUMessageFormatPointer failure");
33250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        return;
33350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
33450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#endif  /* UCONFIG_NO_FORMATTING  */
33550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
33650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#if !UCONFIG_NO_NORMALIZATION
33750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    const UNormalizer2 *nfc=unorm2_getInstance(NULL, "nfc", UNORM2_COMPOSE, errorCode);
33850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    UnicodeSet emptySet;
33950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    LocalUNormalizer2Pointer fn2(unorm2_openFiltered(nfc, emptySet.toUSet(), errorCode));
34050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if(errorCode.logIfFailureAndReset("unorm2_openFiltered()")) {
34150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        return;
34250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
34350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if(fn2.isNull()) {
34450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        errln("LocalUNormalizer2Pointer failure");
34550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        return;
34650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
34750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#endif /* !UCONFIG_NO_NORMALIZATION */
34850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
34927f654740f2a26ad62a5c155af9199af9e69b889claireho#if !UCONFIG_NO_IDNA
35027f654740f2a26ad62a5c155af9199af9e69b889claireho    LocalUIDNAPointer idna(uidna_openUTS46(0, errorCode));
35127f654740f2a26ad62a5c155af9199af9e69b889claireho    if(errorCode.logIfFailureAndReset("uidna_openUTS46()")) {
35227f654740f2a26ad62a5c155af9199af9e69b889claireho        return;
35327f654740f2a26ad62a5c155af9199af9e69b889claireho    }
35427f654740f2a26ad62a5c155af9199af9e69b889claireho    if(idna.isNull()) {
35527f654740f2a26ad62a5c155af9199af9e69b889claireho        errln("LocalUIDNAPointer failure");
35627f654740f2a26ad62a5c155af9199af9e69b889claireho        return;
35727f654740f2a26ad62a5c155af9199af9e69b889claireho    }
35827f654740f2a26ad62a5c155af9199af9e69b889claireho#endif  /* !UCONFIG_NO_IDNA */
35927f654740f2a26ad62a5c155af9199af9e69b889claireho
36050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#if !UCONFIG_NO_REGULAR_EXPRESSIONS
36150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    UnicodeString pattern=UNICODE_STRING_SIMPLE("abc|xy+z");
36250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    LocalURegularExpressionPointer regex(
36350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        uregex_open(pattern.getBuffer(), pattern.length(), 0, NULL, errorCode));
36450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if(errorCode.logIfFailureAndReset("uregex_open()")) {
36550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        return;
36650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
36750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if(regex.isNull()) {
36850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        errln("LocalURegularExpressionPointer failure");
36950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        return;
37050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
37150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#endif /* UCONFIG_NO_REGULAR_EXPRESSIONS */
37250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
37350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#if !UCONFIG_NO_TRANSLITERATION
37450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    UnicodeString id=UNICODE_STRING_SIMPLE("Grek-Latn");
37550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    LocalUTransliteratorPointer trans(
37650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        utrans_openU(id.getBuffer(), id.length(), UTRANS_FORWARD, NULL, 0, NULL, errorCode));
37750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if(errorCode.logIfFailureAndReset("utrans_open()")) {
37850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        return;
37950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
38050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if(trans.isNull()) {
38150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        errln("LocalUTransliteratorPointer failure");
38250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        return;
38350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
38450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#endif /* !UCONFIG_NO_TRANSLITERATION */
38550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
38650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    // destructors
38750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}
38850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
38950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho// Try LocalXyzPointer types with NULL pointers.
39050294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid LocalPointerTest::TestLocalXyzPointerNull() {
39150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {
39250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        IcuTestErrorCode errorCode(*this, "TestLocalXyzPointerNull/LocalUConverterSelectorPointer");
39350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        static const char *const encoding="ISO-8859-1";
39450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        LocalUConverterSelectorPointer null;
39550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        LocalUConverterSelectorPointer sel(
39650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            ucnvsel_open(&encoding, 1, NULL, UCNV_ROUNDTRIP_SET, errorCode));
39750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        sel.adoptInstead(NULL);
39850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
39950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#if !UCONFIG_NO_FORMATTING
40050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {
40150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        IcuTestErrorCode errorCode(*this, "TestLocalXyzPointerNull/LocalUCalendarPointer");
40250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        LocalUCalendarPointer null;
40350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        LocalUCalendarPointer cal(ucal_open(NULL, 0, "root", UCAL_GREGORIAN, errorCode));
40450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        if(!errorCode.logDataIfFailureAndReset("ucal_open()")) {
40550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            cal.adoptInstead(NULL);
40650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        }
40750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
40850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {
40950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        IcuTestErrorCode errorCode(*this, "TestLocalXyzPointerNull/LocalUDateTimePatternGeneratorPointer");
41050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        LocalUDateTimePatternGeneratorPointer null;
41150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        LocalUDateTimePatternGeneratorPointer patgen(udatpg_open("root", errorCode));
41250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        patgen.adoptInstead(NULL);
41350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
41450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {
41550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        IcuTestErrorCode errorCode(*this, "TestLocalXyzPointerNull/LocalUMessageFormatPointer");
41650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        UnicodeString hello=UNICODE_STRING_SIMPLE("Hello {0}!");
41750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        LocalUMessageFormatPointer null;
41850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        LocalUMessageFormatPointer msg(
41950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            umsg_open(hello.getBuffer(), hello.length(), "root", NULL, errorCode));
42050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        msg.adoptInstead(NULL);
42150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
42250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#endif /* !UCONFIG_NO_FORMATTING */
42350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
42450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#if !UCONFIG_NO_REGULAR_EXPRESSIONS
42550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {
42650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        IcuTestErrorCode errorCode(*this, "TestLocalXyzPointerNull/LocalURegularExpressionPointer");
42750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        UnicodeString pattern=UNICODE_STRING_SIMPLE("abc|xy+z");
42850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        LocalURegularExpressionPointer null;
42950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        LocalURegularExpressionPointer regex(
43050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            uregex_open(pattern.getBuffer(), pattern.length(), 0, NULL, errorCode));
43150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        if(!errorCode.logDataIfFailureAndReset("urege_open()")) {
43250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            regex.adoptInstead(NULL);
43350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        }
43450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
43550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#endif /* !UCONFIG_NO_REGULAR_EXPRESSIONS */
43650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
43750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#if !UCONFIG_NO_TRANSLITERATION
43850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {
43950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        IcuTestErrorCode errorCode(*this, "TestLocalXyzPointerNull/LocalUTransliteratorPointer");
44050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        UnicodeString id=UNICODE_STRING_SIMPLE("Grek-Latn");
44150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        LocalUTransliteratorPointer null;
44250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        LocalUTransliteratorPointer trans(
44350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            utrans_openU(id.getBuffer(), id.length(), UTRANS_FORWARD, NULL, 0, NULL, errorCode));
44450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        if(!errorCode.logDataIfFailureAndReset("utrans_openU()")) {
44550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            trans.adoptInstead(NULL);
44650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        }
44750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
44850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#endif /* !UCONFIG_NO_TRANSLITERATION */
44950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
450b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru}
451