void IntlTestSpoof::testSpoofAPI() { TEST_SETUP UnicodeString s("xyz"); // Many latin ranges are whole-script confusable with other scripts. // If this test starts failing, consult confusablesWholeScript.txt int32_t position = 666; int32_t checkResults = uspoof_checkUnicodeString(sc, s, &position, &status); TEST_ASSERT_SUCCESS(status); TEST_ASSERT_EQ(0, checkResults); TEST_ASSERT_EQ(666, position); TEST_TEARDOWN; TEST_SETUP UnicodeString s1("cxs"); UnicodeString s2 = UnicodeString("\\u0441\\u0445\\u0455").unescape(); // Cyrillic "cxs" int32_t checkResults = uspoof_areConfusableUnicodeString(sc, s1, s2, &status); TEST_ASSERT_EQ(USPOOF_MIXED_SCRIPT_CONFUSABLE | USPOOF_WHOLE_SCRIPT_CONFUSABLE, checkResults); TEST_TEARDOWN; TEST_SETUP UnicodeString s("I1l0O"); UnicodeString dest; UnicodeString &retStr = uspoof_getSkeletonUnicodeString(sc, USPOOF_ANY_CASE, s, dest, &status); TEST_ASSERT_SUCCESS(status); TEST_ASSERT(UnicodeString("lllOO") == dest); TEST_ASSERT(&dest == &retStr); TEST_TEARDOWN; }
void IntlTestSpoof::testSpoofAPI() { TEST_SETUP UnicodeString s("uvw"); int32_t position = 666; int32_t checkResults = uspoof_checkUnicodeString(sc, s, &position, &status); TEST_ASSERT_SUCCESS(status); TEST_ASSERT_EQ(0, checkResults); TEST_ASSERT_EQ(666, position); TEST_TEARDOWN; TEST_SETUP UnicodeString s1("cxs"); UnicodeString s2 = UnicodeString("\\u0441\\u0445\\u0455").unescape(); // Cyrillic "cxs" int32_t checkResults = uspoof_areConfusableUnicodeString(sc, s1, s2, &status); TEST_ASSERT_EQ(USPOOF_MIXED_SCRIPT_CONFUSABLE | USPOOF_WHOLE_SCRIPT_CONFUSABLE, checkResults); TEST_TEARDOWN; TEST_SETUP UnicodeString s("I1l0O"); UnicodeString dest; UnicodeString &retStr = uspoof_getSkeletonUnicodeString(sc, USPOOF_ANY_CASE, s, dest, &status); TEST_ASSERT_SUCCESS(status); TEST_ASSERT(UnicodeString("11100") == dest); TEST_ASSERT(&dest == &retStr); TEST_TEARDOWN; }
void IntlTestSpoof::testBug8654() { TEST_SETUP UnicodeString s = UnicodeString("B\\u00c1\\u0301").unescape(); int32_t position = -42; TEST_ASSERT_EQ(USPOOF_INVISIBLE, uspoof_checkUnicodeString(sc, s, &position, &status) & USPOOF_INVISIBLE ); TEST_ASSERT_SUCCESS(status); TEST_ASSERT_EQ(3, position); TEST_TEARDOWN; }
void IntlTestSpoof::testInvisible() { TEST_SETUP UnicodeString s = UnicodeString("abcd\\u0301ef").unescape(); int32_t position = -42; TEST_ASSERT_EQ(0, uspoof_checkUnicodeString(sc, s, &position, &status)); TEST_ASSERT_SUCCESS(status); TEST_ASSERT(position == -42); UnicodeString s2 = UnicodeString("abcd\\u0301\\u0302\\u0301ef").unescape(); TEST_ASSERT_EQ(USPOOF_INVISIBLE, uspoof_checkUnicodeString(sc, s2, &position, &status)); TEST_ASSERT_SUCCESS(status); TEST_ASSERT_EQ(7, position); // Two acute accents, one from the composed a with acute accent, \u00e1, // and one separate. position = -42; UnicodeString s3 = UnicodeString("abcd\\u00e1\\u0301xyz").unescape(); TEST_ASSERT_EQ(USPOOF_INVISIBLE, uspoof_checkUnicodeString(sc, s3, &position, &status)); TEST_ASSERT_SUCCESS(status); TEST_ASSERT_EQ(7, position); TEST_TEARDOWN; }
U_CAPI int32_t U_EXPORT2 uspoof_checkUTF8(const USpoofChecker *sc, const char *id, int32_t length, int32_t *position, UErrorCode *status) { if (U_FAILURE(*status)) { return 0; } UnicodeString idStr = UnicodeString::fromUTF8(StringPiece(id, length>=0 ? length : uprv_strlen(id))); int32_t result = uspoof_checkUnicodeString(sc, idStr, position, status); return result; }
U_CAPI int32_t U_EXPORT2 uspoof_check(const USpoofChecker *sc, const UChar *id, int32_t length, int32_t *position, UErrorCode *status) { const SpoofImpl *This = SpoofImpl::validateThis(sc, *status); if (This == NULL) { return 0; } if (length < -1) { *status = U_ILLEGAL_ARGUMENT_ERROR; return 0; } UnicodeString idStr((length == -1), id, length); // Aliasing constructor. int32_t result = uspoof_checkUnicodeString(sc, idStr, position, status); return result; }