JUnit сравнение строк не выполняется для Emoji - PullRequest
0 голосов
/ 06 мая 2018

Я получаю тестовый сбой, который показывает

junit.framework.ComparisonFailure: 
Expected :?‍⚕?‍♂️️
Actual   :?‍⚕️?‍♂️

Эти две строки выглядят одинаково для меня! Что мне здесь не хватает? Я думаю, что консоль скрывает некоторые символы, такие как, возможно, столяр нулевой ширины?

Вот мой код. У меня есть другие тесты, использующие ?, ?? и ?‍⚕️. Сбой только с 100

class Emoji {
    static String unicodeStringFromCodePointStrings(String[] codePointStrings) {
        StringBuilder sb = new StringBuilder();
        for (String codePointString : codePointStrings) {
            codePointString = codePointString.replace("U+","");
            int codePoint = Integer.parseInt(codePointString, 16);
            char[] chars = Character.toChars(codePoint);
            sb.append(new String(chars));
        }
        return sb.toString();
    }
}

public class EmojiTest {
    @Test
    public void testMultipleCompoundEmoji() {
        String[] input = "U+1F469 U+200D U+2695 U+FE0F U+1F9D8 U+200D U+2642 U+FE0F".split(" ");
        String output = Emoji.unicodeStringFromCodePointStrings(input);
        assertEquals("?‍⚕?‍♂️️", output);
    }
}

1 Ответ

0 голосов
/ 06 мая 2018

Первое (ожидаемое) значение

\u1F469\u200D\u2695\u1F9D8\u200D\u2642\uFE0F\uFE0F

Второй (фактический):

\u1F469\u200D\u2695\uFE0F\u1F9D8\u200D\u2642\uFE0F

Как видите, в ожидаемом значении оба символа U+FE0F находятся в конце.

Они могут выглядеть одинаково, но они не совпадают String значения.

Разницу было легко заметить, когда вы копируете / вставляете текст в конвертер UTF-8, например http://www.endmemo.com/unicode/unicodeconverter.php

...