TESTCASE(82,TestHalfwidthFullwidth);
TESTCASE(83,TestThai);
TESTCASE(84,TestAny);
+ TESTCASE(85,TestHansHant);
default: name = ""; break;
}
}
* 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 {
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,
exp = CharsToUnicodeString(DATA[i+3]);
}
UBool expOk = (DATA[i+1] != NULL);
- Transliterator* t = NULL;
+ LocalPointer<Transliterator> 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 {
if (source.length() != 0) {
expect(*t, source, exp);
}
- delete t;
} else {
dataerrln((UnicodeString)"FAIL: " + id + " => " + transID + ", " +
u_errorName(ec));
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<Transliterator> t2(
+ Transliterator::createFromRules("source-target", UnicodeString(testRules, -1, US_INV), UTRANS_FORWARD, pe, ec));
+ LocalPointer<Transliterator> 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;
}
checkRules("Failed toRules FORWARD", *t2, UnicodeString(testRulesForward, -1, US_INV));
checkRules("Failed toRules BACKWARD", *t3, UnicodeString(testRulesBackward, -1, US_INV));
-
- delete t2;
- delete t3;
}
/**
}
-#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)) { \
/* *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); \
/* *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);
#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