Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d7e22212 authored by vichang's avatar vichang Committed by Gerrit Code Review
Browse files

Merge "Fix AndroidCharacter.getDirectionalities for unassigned Unicode code points"

parents 08f0b659 749d1848
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -76,7 +76,8 @@ static void getDirectionalities(JNIEnv* env, jobject obj, jcharArray srcArray,
            int c = 0x00010000 + ((src[i] - 0xD800) << 10) +
                                 (src[i + 1] & 0x3FF);
            int dir = u_charDirection(c);
            if (dir < 0 || dir > JAVA_LANG_CHARACTER_MAX_DIRECTIONALITY)
            if (dir < 0 || dir > JAVA_LANG_CHARACTER_MAX_DIRECTIONALITY
                    || u_charType(c) == U_UNASSIGNED)
                dir = PROPERTY_UNDEFINED;
            else
                dir = directionality_map[dir];
@@ -86,7 +87,8 @@ static void getDirectionalities(JNIEnv* env, jobject obj, jcharArray srcArray,
        } else {
            int c = src[i];
            int dir = u_charDirection(c);
            if (dir < 0 || dir > JAVA_LANG_CHARACTER_MAX_DIRECTIONALITY)
            if (dir < 0 || dir > JAVA_LANG_CHARACTER_MAX_DIRECTIONALITY
                    || u_charType(c) == U_UNASSIGNED)
                dest[i] = PROPERTY_UNDEFINED;
            else
                dest[i] = directionality_map[dir];
+9 −15
Original line number Diff line number Diff line
@@ -35,15 +35,12 @@ public class AndroidCharacterTest {
        byte[] java_lang_results = new byte[size];
        int index = 0;
        for (int cp = 0; cp <= Character.MAX_VALUE; cp++) {
            // Exempt unassigned code point due to b/120074586
            if (Character.getType(cp) != Character.UNASSIGNED) {
            if (cp < Character.MIN_SURROGATE || cp > Character.MAX_SURROGATE) {
                chars[index] = (char) cp;
                java_lang_results[index] = Character.getDirectionality(cp);
                index++;
            }
        }
        }

        byte[] android_text_results = new byte[size];
        AndroidCharacter.getDirectionalities(chars, android_text_results, index);
@@ -60,15 +57,12 @@ public class AndroidCharacterTest {
        int index = 0;
        for (int cp = Character.MIN_SUPPLEMENTARY_CODE_POINT; cp <= Character.MAX_CODE_POINT;
                cp++) {
            // Exempt unassigned code point due to b/120074586
            if (Character.getType(cp) != Character.UNASSIGNED) {
            chars[index] = Character.highSurrogate(cp);
            chars[index + 1] = Character.lowSurrogate(cp);
            java_lang_results[index] = java_lang_results[index + 1] = Character
                    .getDirectionality(cp);
            index += 2;
        }
        }

        byte[] android_text_results = new byte[size];
        AndroidCharacter.getDirectionalities(chars, android_text_results, index);