Skip to content

Commit

Permalink
ICU-22433 make it work with UCONFIG_NO_NORMALIZATION
Browse files Browse the repository at this point in the history
  • Loading branch information
eggrobin committed Jul 5, 2023
1 parent 44bec0b commit 4ba1bee
Showing 1 changed file with 18 additions and 15 deletions.
33 changes: 18 additions & 15 deletions icu4c/source/test/intltest/strcase.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -75,8 +75,8 @@ class StringCaseTest: public IntlTest {

private:
void assertGreekUpper(const char16_t *s, const char16_t *expected);
void assertGreekUpperNormalized(const char16_t *s, const char16_t *expected,
const Normalizer2 *normalizer, const char *form);
void assertGreekUpperNormalized(const UnicodeString &s16, const UnicodeString &expected16,
const char *form);

Locale GREEK_LOCALE_;
};
Expand Down Expand Up @@ -811,16 +811,19 @@ StringCaseTest::TestFullCaseFoldingIterator() {

void StringCaseTest::assertGreekUpper(const char16_t *s, const char16_t *expected) {
UErrorCode errorCode = U_ZERO_ERROR;
assertGreekUpperNormalized(s, expected, Normalizer2::getNFCInstance(errorCode), "NFC");
assertGreekUpperNormalized(s, expected, Normalizer2::getNFDInstance(errorCode), "NFD");
#if UCONFIG_NO_NORMALIZATION
assertGreekUpperNormalized(s, expected, Normalizer2::getNFCInstance(errorCode), "No normalization");
#else
const Normalizer2 &nfc = *Normalizer2::getNFCInstance(errorCode);
const Normalizer2 &nfd = *Normalizer2::getNFDInstance(errorCode);
assertGreekUpperNormalized(nfc.normalize(s, errorCode), nfc.normalize(expected, errorCode), "NFC");
assertGreekUpperNormalized(nfd.normalize(s, errorCode), nfd.normalize(expected, errorCode), "NFD");
#endif
}

void StringCaseTest::assertGreekUpperNormalized(const char16_t *s, const char16_t *expected,
const Normalizer2 *normalizer, const char *form) {
UErrorCode normalizationError = U_ZERO_ERROR;
const UnicodeString s16 = normalizer->normalize(s, normalizationError);
const UnicodeString expected16 = normalizer->normalize(expected, normalizationError);

void StringCaseTest::assertGreekUpperNormalized(const UnicodeString &s16,
const UnicodeString &expected16,
const char *form) {
UnicodeString msg = UnicodeString("UnicodeString::toUpper/Greek(\"") + s16 + "\" [" + form + "])";
UnicodeString result16(s16);
result16.toUpper(GREEK_LOCALE_);
Expand Down Expand Up @@ -912,22 +915,22 @@ StringCaseTest::TestGreekUpper() {
assertGreekUpper(u"ΰ, Τηρώ, Μάιος", u"Ϋ, ΤΗΡΩ, ΜΑΪΟΣ");
assertGreekUpper(u"άυλος", u"ΑΫΛΟΣ");
assertGreekUpper(u"ΑΫΛΟΣ", u"ΑΫΛΟΣ");
assertGreekUpper(u"Άκλιτα ρήματα ή άκλιτες μετοχές", u"ΑΚΛΙΤΑ ΡΗΜΑΤΑ Ή ΑΚΛΙΤΕΣ ΜΕΤΟΧΕΣ");
assertGreekUpper(u"Άκλιτα ρήματα ή άκλιτες μετοχές", u"ΑΚΛΙΤΑ ΡΗΜΑΤΑ Ή ΑΚΛΙΤΕΣ ΜΕΤΟΧΕΣ");
// http://www.unicode.org/udhr/d/udhr_ell_monotonic.html
assertGreekUpper(u"Επειδή η αναγνώριση της αξιοπρέπειας", u"ΕΠΕΙΔΗ Η ΑΝΑΓΝΩΡΙΣΗ ΤΗΣ ΑΞΙΟΠΡΕΠΕΙΑΣ");
assertGreekUpper(u"νομικού ή διεθνούς", u"ΝΟΜΙΚΟΥ Ή ΔΙΕΘΝΟΥΣ");
assertGreekUpper(u"νομικού ή διεθνούς", u"ΝΟΜΙΚΟΥ Ή ΔΙΕΘΝΟΥΣ");
// http://unicode.org/udhr/d/udhr_ell_polytonic.html
assertGreekUpper(u"Ἐπειδὴ ἡ ἀναγνώριση", u"ΕΠΕΙΔΗ Η ΑΝΑΓΝΩΡΙΣΗ");
assertGreekUpper(u"νομικοῦ ἢ διεθνοῦς", u"ΝΟΜΙΚΟΥ Ή ΔΙΕΘΝΟΥΣ");
assertGreekUpper(u"νομικοῦ ἢ διεθνοῦς", u"ΝΟΜΙΚΟΥ Ή ΔΙΕΘΝΟΥΣ");
// From Google bug report
assertGreekUpper(u"Νέο, Δημιουργία", u"ΝΕΟ, ΔΗΜΙΟΥΡΓΙΑ");
// http://crbug.com/234797
assertGreekUpper(u"Ελάτε να φάτε τα καλύτερα παϊδάκια!", u"ΕΛΑΤΕ ΝΑ ΦΑΤΕ ΤΑ ΚΑΛΥΤΕΡΑ ΠΑΪΔΑΚΙΑ!");
assertGreekUpper(u"Μαΐου, τρόλεϊ", u"ΜΑΪΟΥ, ΤΡΟΛΕΪ");
assertGreekUpper(u"Το ένα ή το άλλο.", u"ΤΟ ΕΝΑ Ή ΤΟ ΑΛΛΟ.");
assertGreekUpper(u"Το ένα ή το άλλο.", u"ΤΟ ΕΝΑ Ή ΤΟ ΑΛΛΟ.");
// http://multilingualtypesetting.co.uk/blog/greek-typesetting-tips/
assertGreekUpper(u"ρωμέικα", u"ΡΩΜΕΪΚΑ");
assertGreekUpper(u"ή.", u"Ή.");
assertGreekUpper(u"ή.", u"Ή.");

// The ὑπογεγραμμέναι become Ι as in default case conversion, but they are
// specially handled by the implementation.
Expand Down

0 comments on commit 4ba1bee

Please sign in to comment.