X-Git-Url: https://git.saurik.com/apple/icu.git/blobdiff_plain/a01113dcd0f39d5da295ef82785beff9ed86fe38..HEAD:/icuSources/test/intltest/transtst.cpp diff --git a/icuSources/test/intltest/transtst.cpp b/icuSources/test/intltest/transtst.cpp index 0a162acb..6b263a98 100644 --- a/icuSources/test/intltest/transtst.cpp +++ b/icuSources/test/intltest/transtst.cpp @@ -196,6 +196,7 @@ TransliteratorTest::runIndexedTest(int32_t index, UBool exec, TESTCASE(82,TestHalfwidthFullwidth); TESTCASE(83,TestThai); TESTCASE(84,TestAny); + TESTCASE(85,TestHansHant); default: name = ""; break; } } @@ -657,7 +658,7 @@ int gTestFilterClassID = 0; * Used by TestFiltering(). */ class TestFilter : public UnicodeFilter { - virtual UnicodeFunctor* clone() const { + virtual TestFilter* clone() const { return new TestFilter(*this); } virtual UBool contains(UChar32 c) const { @@ -1947,7 +1948,7 @@ class TestTrans : public Transliterator { public: TestTrans(const UnicodeString& id) : Transliterator(id, 0) { } - virtual Transliterator* clone(void) const { + virtual TestTrans* clone(void) const { return new TestTrans(getID()); } virtual void handleTransliterate(Replaceable& /*text*/, UTransPosition& offsets, @@ -2340,17 +2341,17 @@ void TransliteratorTest::TestCompoundFilterID(void) { exp = CharsToUnicodeString(DATA[i+3]); } UBool expOk = (DATA[i+1] != NULL); - Transliterator* t = NULL; + LocalPointer t; UParseError pe; UErrorCode ec = U_ZERO_ERROR; if (id.charAt(0) == 0x23/*#*/) { - t = Transliterator::createFromRules("ID", id, direction, pe, ec); + t.adoptInstead(Transliterator::createFromRules("ID", id, direction, pe, ec)); } else { - t = Transliterator::createInstance(id, direction, pe, ec); + t.adoptInstead(Transliterator::createInstance(id, direction, pe, ec)); } - UBool ok = (t != NULL && U_SUCCESS(ec)); + UBool ok = (t.isValid() && U_SUCCESS(ec)); UnicodeString transID; - if (t!=0) { + if (t.isValid()) { transID = t->getID(); } else { @@ -2362,7 +2363,6 @@ void TransliteratorTest::TestCompoundFilterID(void) { if (source.length() != 0) { expect(*t, source, exp); } - delete t; } else { dataerrln((UnicodeString)"FAIL: " + id + " => " + transID + ", " + u_errorName(ec)); @@ -3176,12 +3176,12 @@ void TransliteratorTest::TestToRulesMark() { UParseError pe; UErrorCode ec = U_ZERO_ERROR; - Transliterator *t2 = Transliterator::createFromRules("source-target", UnicodeString(testRules, -1, US_INV), UTRANS_FORWARD, pe, ec); - Transliterator *t3 = Transliterator::createFromRules("target-source", UnicodeString(testRules, -1, US_INV), UTRANS_REVERSE, pe, ec); + LocalPointer t2( + Transliterator::createFromRules("source-target", UnicodeString(testRules, -1, US_INV), UTRANS_FORWARD, pe, ec)); + LocalPointer t3( + Transliterator::createFromRules("target-source", UnicodeString(testRules, -1, US_INV), UTRANS_REVERSE, pe, ec)); if (U_FAILURE(ec)) { - delete t2; - delete t3; dataerrln((UnicodeString)"FAIL: createFromRules => " + u_errorName(ec)); return; } @@ -3191,9 +3191,6 @@ void TransliteratorTest::TestToRulesMark() { checkRules("Failed toRules FORWARD", *t2, UnicodeString(testRulesForward, -1, US_INV)); checkRules("Failed toRules BACKWARD", *t3, UnicodeString(testRulesBackward, -1, US_INV)); - - delete t2; - delete t3; } /** @@ -4081,7 +4078,7 @@ void TransliteratorTest::TestAllCodepoints(){ } -#define TEST_TRANSLIT_ID(id, cls) { \ +#define TEST_TRANSLIT_ID(id, cls) UPRV_BLOCK_MACRO_BEGIN { \ UErrorCode ec = U_ZERO_ERROR; \ Transliterator* t = Transliterator::createInstance(id, UTRANS_FORWARD, ec); \ if (U_FAILURE(ec)) { \ @@ -4093,9 +4090,9 @@ void TransliteratorTest::TestAllCodepoints(){ /* *t = *t; */ /*can't do this: coverage test for assignment op*/ \ } \ delete t; \ -} +} UPRV_BLOCK_MACRO_END -#define TEST_TRANSLIT_RULE(rule, cls) { \ +#define TEST_TRANSLIT_RULE(rule, cls) UPRV_BLOCK_MACRO_BEGIN { \ UErrorCode ec = U_ZERO_ERROR; \ UParseError pe; \ Transliterator* t = Transliterator::createFromRules("_", rule, UTRANS_FORWARD, pe, ec); \ @@ -4108,7 +4105,7 @@ void TransliteratorTest::TestAllCodepoints(){ /* *t = *t; */ /*can't do this: coverage test for assignment op*/ \ } \ delete t; \ -} +} UPRV_BLOCK_MACRO_END void TransliteratorTest::TestBoilerplate() { TEST_TRANSLIT_ID("Any-Latin", AnyTransliterator); @@ -4694,6 +4691,32 @@ void TransliteratorTest::TestThai(void) { #endif } +/** + * Test for rdar://problem/61817095 (and maybe eventually other Hans-Hant errors) + * Apple-only + * ICU4C only + */ +void TransliteratorTest::TestHansHant(void) { + UParseError parseError; + UErrorCode status = U_ZERO_ERROR; + Transliterator* tr = Transliterator::createInstance("Hans-Hant", UTRANS_FORWARD, parseError, status); + if (U_FAILURE(status)) { + errln("FAIL: createInstance failed with %s", u_errorName(status)); + return; + } + + const char* _sourceText = "\\u810f \\u5185\\u810f \\u810f\\u5668 \\u4e94\\u810f \\u5fc3\\u810f \\u809d\\u810f \\u813e\\u810f \\u80c3\\u810f \\u80be\\u810f \\u80f0\\u810f \\u810f\\u8151 \\u80ba\\u810f"; + const char* _expectedResult = "\\u9ad2 \\u5167\\u81df \\u81df\\u5668 \\u4e94\\u81df \\u5fc3\\u81df \\u809d\\u81df \\u813e\\u81df \\u80c3\\u81df \\u814e\\u81df \\u80f0\\u81df \\u81df\\u8151 \\u80ba\\u81df"; + + UnicodeString sourceText(_sourceText); + UnicodeString expectedResult(_expectedResult); + sourceText = sourceText.unescape(); + expectedResult = expectedResult.unescape(); + + expect(*tr, sourceText, expectedResult); + delete tr; +} + //====================================================================== // Support methods