X-Git-Url: https://git.saurik.com/apple/icu.git/blobdiff_plain/729e4ab9bc6618bc3d8a898e575df7f4019e29ca..b801cf366c7671a99bdcef84d1e9c0ec64b36723:/icuSources/test/intltest/itutil.cpp?ds=sidebyside diff --git a/icuSources/test/intltest/itutil.cpp b/icuSources/test/intltest/itutil.cpp index bd5e392c..ce2c5a85 100644 --- a/icuSources/test/intltest/itutil.cpp +++ b/icuSources/test/intltest/itutil.cpp @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 1997-2010, International Business Machines Corporation and + * Copyright (c) 1997-2014, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ @@ -12,6 +12,7 @@ #include "unicode/utypes.h" #include "unicode/errorcode.h" #include "unicode/localpointer.h" +#include "charstr.h" #include "itutil.h" #include "strtest.h" #include "loctest.h" @@ -29,7 +30,13 @@ #include "aliastst.h" #include "usettest.h" +extern IntlTest *createBytesTrieTest(); static IntlTest *createLocalPointerTest(); +extern IntlTest *createUCharsTrieTest(); +static IntlTest *createEnumSetTest(); +extern IntlTest *createSimplePatternFormatterTest(); +extern IntlTest *createUnifiedCacheTest(); +extern IntlTest *createQuantityFormatterTest(); #define CASE(id, test) case id: \ name = #test; \ @@ -68,6 +75,54 @@ void IntlTestUtilities::runIndexedTest( int32_t index, UBool exec, const char* & callTest(*test, par); } break; + case 17: + name = "BytesTrieTest"; + if (exec) { + logln("TestSuite BytesTrieTest---"); logln(); + LocalPointer test(createBytesTrieTest()); + callTest(*test, par); + } + break; + case 18: + name = "UCharsTrieTest"; + if (exec) { + logln("TestSuite UCharsTrieTest---"); logln(); + LocalPointer test(createUCharsTrieTest()); + callTest(*test, par); + } + break; + case 19: + name = "EnumSetTest"; + if (exec) { + logln("TestSuite EnumSetTest---"); logln(); + LocalPointer test(createEnumSetTest()); + callTest(*test, par); + } + break; + case 20: + name = "SimplePatternFormatterTest"; + if (exec) { + logln("TestSuite SimplePatternFormatterTest---"); logln(); + LocalPointer test(createSimplePatternFormatterTest()); + callTest(*test, par); + } + break; + case 21: + name = "UnifiedCacheTest"; + if (exec) { + logln("TestSuite UnifiedCacheTest---"); logln(); + LocalPointer test(createUnifiedCacheTest()); + callTest(*test, par); + } + break; + case 22: + name = "QuantityFormatterTest"; + if (exec) { + logln("TestSuite QuantityFormatterTest---"); logln(); + LocalPointer test(createQuantityFormatterTest()); + callTest(*test, par); + } + break; default: name = ""; break; //needed to end loop } } @@ -208,15 +263,12 @@ void LocalPointerTest::runIndexedTest(int32_t index, UBool exec, const char *&na if(exec) { logln("TestSuite LocalPointerTest: "); } - switch (index) { - TESTCASE(0, TestLocalPointer); - TESTCASE(1, TestLocalArray); - TESTCASE(2, TestLocalXyzPointer); - TESTCASE(3, TestLocalXyzPointerNull); - default: - name=""; - break; // needed to end the loop - } + TESTCASE_AUTO_BEGIN; + TESTCASE_AUTO(TestLocalPointer); + TESTCASE_AUTO(TestLocalArray); + TESTCASE_AUTO(TestLocalXyzPointer); + TESTCASE_AUTO(TestLocalXyzPointerNull); + TESTCASE_AUTO_END; } // Exercise every LocalPointer and LocalPointerBase method. @@ -247,6 +299,43 @@ void LocalPointerTest::TestLocalPointer() { if(s->length()!=0) { errln("LocalPointer adoptInstead(empty) failure"); } + + // LocalPointer(p, errorCode) sets U_MEMORY_ALLOCATION_ERROR if p==NULL. + UErrorCode errorCode = U_ZERO_ERROR; + LocalPointer cs(new CharString("some chars", errorCode), errorCode); + if(cs.isNull() && U_SUCCESS(errorCode)) { + errln("LocalPointer(p, errorCode) failure"); + return; + } + errorCode = U_ZERO_ERROR; + cs.adoptInsteadAndCheckErrorCode(new CharString("different chars", errorCode), errorCode); + if(cs.isNull() && U_SUCCESS(errorCode)) { + errln("adoptInsteadAndCheckErrorCode(p, errorCode) failure"); + return; + } + // Incoming failure: Keep the current object and delete the input object. + errorCode = U_ILLEGAL_ARGUMENT_ERROR; + cs.adoptInsteadAndCheckErrorCode(new CharString("unused", errorCode), errorCode); + if(cs.isValid() && strcmp(cs->data(), "different chars") != 0) { + errln("adoptInsteadAndCheckErrorCode(p, U_FAILURE) did not retain the old object"); + return; + } + errorCode = U_ZERO_ERROR; + cs.adoptInsteadAndCheckErrorCode(NULL, errorCode); + if(errorCode != U_MEMORY_ALLOCATION_ERROR) { + errln("adoptInsteadAndCheckErrorCode(NULL, errorCode) did not set U_MEMORY_ALLOCATION_ERROR"); + return; + } + if(cs.isValid()) { + errln("adoptInsteadAndCheckErrorCode(NULL, errorCode) kept the object"); + return; + } + errorCode = U_ZERO_ERROR; + LocalPointer null(NULL, errorCode); + if(errorCode != U_MEMORY_ALLOCATION_ERROR) { + errln("LocalPointer(NULL, errorCode) did not set U_MEMORY_ALLOCATION_ERROR"); + return; + } } // Exercise every LocalArray method (but not LocalPointerBase). @@ -304,7 +393,7 @@ void LocalPointerTest::TestLocalXyzPointer() { } LocalUDateTimePatternGeneratorPointer patgen(udatpg_open("root", errorCode)); - if(errorCode.logIfFailureAndReset("udatpg_open()")) { + if(errorCode.logDataIfFailureAndReset("udatpg_open()")) { return; } if(patgen.isNull()) { @@ -334,7 +423,7 @@ void LocalPointerTest::TestLocalXyzPointer() { #endif /* UCONFIG_NO_FORMATTING */ #if !UCONFIG_NO_NORMALIZATION - const UNormalizer2 *nfc=unorm2_getInstance(NULL, "nfc", UNORM2_COMPOSE, errorCode); + const UNormalizer2 *nfc=unorm2_getNFCInstance(errorCode); UnicodeSet emptySet; LocalUNormalizer2Pointer fn2(unorm2_openFiltered(nfc, emptySet.toUSet(), errorCode)); if(errorCode.logIfFailureAndReset("unorm2_openFiltered()")) { @@ -448,3 +537,84 @@ void LocalPointerTest::TestLocalXyzPointerNull() { #endif /* !UCONFIG_NO_TRANSLITERATION */ } + +/** EnumSet test **/ +#include "unicode/enumset.h" + +class EnumSetTest : public IntlTest { +public: + EnumSetTest() {} + virtual void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par=NULL); + void TestEnumSet(); +}; + +static IntlTest *createEnumSetTest() { + return new EnumSetTest(); +} + +void EnumSetTest::runIndexedTest(int32_t index, UBool exec, const char *&name, char * /*par*/) { + TESTCASE_AUTO_BEGIN; + TESTCASE_AUTO(TestEnumSet); + TESTCASE_AUTO_END; +} +enum myEnum { + MAX_NONBOOLEAN=-1, + THING1, + THING2, + THING3, + LIMIT_BOOLEAN +}; + +void EnumSetTest::TestEnumSet() { + EnumSet + flags; + + logln("Enum is from [%d..%d]\n", MAX_NONBOOLEAN+1, + LIMIT_BOOLEAN); + + TEST_ASSERT_TRUE(flags.get(THING1) == FALSE); + TEST_ASSERT_TRUE(flags.get(THING2) == FALSE); + TEST_ASSERT_TRUE(flags.get(THING3) == FALSE); + + logln("get(thing1)=%d, get(thing2)=%d, get(thing3)=%d\n", flags.get(THING1), flags.get(THING2), flags.get(THING3)); + logln("Value now: %d\n", flags.getAll()); + flags.clear(); + logln("clear -Value now: %d\n", flags.getAll()); + logln("get(thing1)=%d, get(thing2)=%d, get(thing3)=%d\n", flags.get(THING1), flags.get(THING2), flags.get(THING3)); + TEST_ASSERT_TRUE(flags.get(THING1) == FALSE); + TEST_ASSERT_TRUE(flags.get(THING2) == FALSE); + TEST_ASSERT_TRUE(flags.get(THING3) == FALSE); + flags.add(THING1); + logln("set THING1 -Value now: %d\n", flags.getAll()); + TEST_ASSERT_TRUE(flags.get(THING1) == TRUE); + TEST_ASSERT_TRUE(flags.get(THING2) == FALSE); + TEST_ASSERT_TRUE(flags.get(THING3) == FALSE); + logln("get(thing1)=%d, get(thing2)=%d, get(thing3)=%d\n", flags.get(THING1), flags.get(THING2), flags.get(THING3)); + flags.add(THING3); + logln("set THING3 -Value now: %d\n", flags.getAll()); + TEST_ASSERT_TRUE(flags.get(THING1) == TRUE); + TEST_ASSERT_TRUE(flags.get(THING2) == FALSE); + TEST_ASSERT_TRUE(flags.get(THING3) == TRUE); + logln("get(thing1)=%d, get(thing2)=%d, get(thing3)=%d\n", flags.get(THING1), flags.get(THING2), flags.get(THING3)); + flags.remove(THING2); + TEST_ASSERT_TRUE(flags.get(THING1) == TRUE); + TEST_ASSERT_TRUE(flags.get(THING2) == FALSE); + TEST_ASSERT_TRUE(flags.get(THING3) == TRUE); + logln("remove THING2 -Value now: %d\n", flags.getAll()); + logln("get(thing1)=%d, get(thing2)=%d, get(thing3)=%d\n", flags.get(THING1), flags.get(THING2), flags.get(THING3)); + flags.remove(THING1); + TEST_ASSERT_TRUE(flags.get(THING1) == FALSE); + TEST_ASSERT_TRUE(flags.get(THING2) == FALSE); + TEST_ASSERT_TRUE(flags.get(THING3) == TRUE); + logln("remove THING1 -Value now: %d\n", flags.getAll()); + logln("get(thing1)=%d, get(thing2)=%d, get(thing3)=%d\n", flags.get(THING1), flags.get(THING2), flags.get(THING3)); + + flags.clear(); + logln("clear -Value now: %d\n", flags.getAll()); + logln("get(thing1)=%d, get(thing2)=%d, get(thing3)=%d\n", flags.get(THING1), flags.get(THING2), flags.get(THING3)); + TEST_ASSERT_TRUE(flags.get(THING1) == FALSE); + TEST_ASSERT_TRUE(flags.get(THING2) == FALSE); + TEST_ASSERT_TRUE(flags.get(THING3) == FALSE); +}