package com.vdurmont.emoji;
import com.vdurmont.emoji.EmojiParser.AliasCandidate;
import com.vdurmont.emoji.EmojiParser.FitzpatrickAction;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
import java.util.ArrayList;
import java.util.List;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
@RunWith(JUnit4.class)
public class EmojiParserTest {
@Test
public void parseToAliases_replaces_the_emojis_by_one_of_their_aliases() {
// GIVEN
String str = "An 😀awesome 😃string with a few 😉emojis!";
// WHEN
String result = EmojiParser.parseToAliases(str);
// THEN
assertEquals(
"An :grinning:awesome :smiley:string with a few :wink:emojis!",
result
);
}
@Test
public void parseToAliases_REPLACE_with_a_fitzpatrick_modifier() {
// GIVEN
String str = "\uD83D\uDC66\uD83C\uDFFF";
// WHEN
String result = EmojiParser.parseToAliases(str);
// THEN
assertEquals(":boy|type_6:", result);
}
@Test
public void parseToAliases_REMOVE_with_a_fitzpatrick_modifier() {
// GIVEN
String str = "\uD83D\uDC66\uD83C\uDFFF";
// WHEN
String result = EmojiParser.parseToAliases(str, FitzpatrickAction.REMOVE);
// THEN
assertEquals(":boy:", result);
}
@Test
public void parseToAliases_REMOVE_without_a_fitzpatrick_modifier() {
// GIVEN
String str = "\uD83D\uDC66";
// WHEN
String result = EmojiParser.parseToAliases(str, FitzpatrickAction.REMOVE);
// THEN
assertEquals(":boy:", result);
}
@Test
public void parseToAliases_IGNORE_with_a_fitzpatrick_modifier() {
// GIVEN
String str = "\uD83D\uDC66\uD83C\uDFFF";
// WHEN
String result = EmojiParser.parseToAliases(str, FitzpatrickAction.IGNORE);
// THEN
assertEquals(":boy:\uD83C\uDFFF", result);
}
@Test
public void parseToAliases_IGNORE_without_a_fitzpatrick_modifier() {
// GIVEN
String str = "\uD83D\uDC66";
// WHEN
String result = EmojiParser.parseToAliases(str, FitzpatrickAction.IGNORE);
// THEN
assertEquals(":boy:", result);
}
@Test
public void parseToAliases_with_long_overlapping_emoji() {
// GIVEN
String str = "\uD83D\uDC68\u200D\uD83D\uDC69\u200D\uD83D\uDC66";
// WHEN
String result = EmojiParser.parseToAliases(str);
//With greedy parsing, this will give :man::woman::boy:
//THEN
assertEquals(":family_man_woman_boy:", result);
}
@Test
public void parseToAliases_continuous_non_overlapping_emojis() {
// GIVEN
String str = "\uD83D\uDC69\uD83D\uDC68\uD83D\uDC66";
// WHEN
String result = EmojiParser.parseToAliases(str);
//THEN
assertEquals(":woman::man::boy:", result);
}
@Test
public void parseToHtmlDecimal_replaces_the_emojis_by_their_html_decimal_representation() {
// GIVEN
String str = "An 😀awesome 😃string with a few 😉emojis!";
// WHEN
String result = EmojiParser.parseToHtmlDecimal(str);
// THEN
assertEquals(
"An 😀awesome 😃string with a few 😉emojis!",
result
);
}
@Test
public void parseToHtmlDecimal_PARSE_with_a_fitzpatrick_modifier() {
// GIVEN
String str = "\uD83D\uDC66\uD83C\uDFFF";
// WHEN
String result = EmojiParser.parseToHtmlDecimal(
str,
FitzpatrickAction.PARSE
);
// THEN
assertEquals("👦", result);
}
@Test
public void parseToHtmlDecimal_REMOVE_with_a_fitzpatrick_modifier() {
// GIVEN
String str = "\uD83D\uDC66\uD83C\uDFFF";
// WHEN
String result = EmojiParser.parseToHtmlDecimal(
str,
FitzpatrickAction.REMOVE
);
// THEN
assertEquals("👦", result);
}
@Test
public void parseToHtmlDecimal_IGNORE_with_a_fitzpatrick_modifier() {
// GIVEN
String str = "\uD83D\uDC66\uD83C\uDFFF";
// WHEN
String result = EmojiParser.parseToHtmlDecimal(
str,
FitzpatrickAction.IGNORE
);
// THEN
assertEquals("👦\uD83C\uDFFF", result);
}
@Test
public void parseToHtmlHexadecimal_replaces_the_emojis_by_their_htm_hex_representation() {
// GIVEN
String str = "An 😀awesome 😃string with a few 😉emojis!";
// WHEN
String result = EmojiParser.parseToHtmlHexadecimal(str);
// THEN
assertEquals(
"An 😀awesome 😃string with a few 😉emojis!",
result
);
}
@Test
public void parseToHtmlHexadecimal_PARSE_with_a_fitzpatrick_modifier() {
// GIVEN
String str = "\uD83D\uDC66\uD83C\uDFFF";
// WHEN
String result = EmojiParser.parseToHtmlHexadecimal(
str,
FitzpatrickAction.PARSE
);
// THEN
assertEquals("👦", result);
}
@Test
public void parseToHtmlHexadecimal_REMOVE_with_a_fitzpatrick_modifier() {
// GIVEN
String str = "\uD83D\uDC66\uD83C\uDFFF";
// WHEN
String result = EmojiParser.parseToHtmlHexadecimal(
str,
FitzpatrickAction.REMOVE
);
// THEN
assertEquals("👦", result);
}
@Test
public void parseToHtmlHexadecimal_IGNORE_with_a_fitzpatrick_modifier() {
// GIVEN
String str = "\uD83D\uDC66\uD83C\uDFFF";
// WHEN
String result = EmojiParser.parseToHtmlHexadecimal(
str,
FitzpatrickAction.IGNORE
);
// THEN
assertEquals("👦\uD83C\uDFFF", result);
}
@Test
public void parseToUnicode_replaces_the_aliases_and_the_html_by_their_emoji() {
// GIVEN
String str = "An :grinning:awesome :smiley:string " +
"😄with a few 😉emojis!";
// WHEN
String result = EmojiParser.parseToUnicode(str);
// THEN
assertEquals("An 😀awesome 😃string 😄with a few 😉emojis!", result);
}
@Test
public void parseToUnicode_with_the_thumbsup_emoji_replaces_the_alias_by_the_emoji() {
// GIVEN
String str = "An :+1:awesome :smiley:string " +
"😄with a few :wink:emojis!";
// WHEN
String result = EmojiParser.parseToUnicode(str);
// THEN
assertEquals(
"An \uD83D\uDC4Dawesome 😃string 😄with a few 😉emojis!",
result
);
}
@Test
public void parseToUnicode_with_the_thumbsdown_emoji_replaces_the_alias_by_the_emoji() {
// GIVEN
String str = "An :-1:awesome :smiley:string 😄" +
"with a few :wink:emojis!";
// WHEN
String result = EmojiParser.parseToUnicode(str);
// THEN
assertEquals(
"An \uD83D\uDC4Eawesome 😃string 😄with a few 😉emojis!",
result
);
}
@Test
public void parseToUnicode_with_the_thumbsup_emoji_in_hex_replaces_the_alias_by_the_emoji() {
// GIVEN
String str = "An :+1:awesome :smiley:string 😄" +
"with a few :wink:emojis!";
// WHEN
String result = EmojiParser.parseToUnicode(str);
// THEN
assertEquals(
"An \uD83D\uDC4Dawesome 😃string 😄with a few 😉emojis!",
result
);
}
@Test
public void parseToUnicode_with_a_fitzpatrick_modifier() {
// GIVEN
String str = ":boy|type_6:";
// WHEN
String result = EmojiParser.parseToUnicode(str);
// THEN
assertEquals("\uD83D\uDC66\uD83C\uDFFF", result);
}
@Test
public void parseToUnicode_with_an_unsupported_fitzpatrick_modifier_doesnt_replace() {
// GIVEN
String str = ":grinning|type_6:";
// WHEN
String result = EmojiParser.parseToUnicode(str);
// THEN
assertEquals(str, result);
}
@Test
public void getAliasCanditates_with_one_alias() {
// GIVEN
String str = "test :candidate: test";
// WHEN
List<AliasCandidate> candidates = EmojiParser.getAliasCandidates(str);
// THEN
assertEquals(1, candidates.size());
assertEquals("candidate", candidates.get(0).alias);
assertNull(candidates.get(0).fitzpatrick);
}
@Test
public void getAliasCanditates_with_one_alias_an_another_colon_after() {
// GIVEN
String str = "test :candidate: test:";
// WHEN
List<AliasCandidate> candidates = EmojiParser.getAliasCandidates(str);
// THEN
assertEquals(1, candidates.size());
assertEquals("candidate", candidates.get(0).alias);
assertNull(candidates.get(0).fitzpatrick);
}
@Test
public void getAliasCanditates_with_one_alias_an_another_colon_right_after() {
// GIVEN
String str = "test :candidate::test";
// WHEN
List<AliasCandidate> candidates = EmojiParser.getAliasCandidates(str);
// THEN
assertEquals(1, candidates.size());
assertEquals("candidate", candidates.get(0).alias);
assertNull(candidates.get(0).fitzpatrick);
}
@Test
public void getAliasCanditates_with_one_alias_an_another_colon_before_after() {
// GIVEN
String str = "test ::candidate: test";
// WHEN
List<AliasCandidate> candidates = EmojiParser.getAliasCandidates(str);
// THEN
assertEquals(1, candidates.size());
assertEquals("candidate", candidates.get(0).alias);
assertNull(candidates.get(0).fitzpatrick);
}
@Test
public void getAliasCanditates_with_two_aliases() {
// GIVEN
String str = "test :candi: :candidate: test";
// WHEN
List<AliasCandidate> candidates = EmojiParser.getAliasCandidates(str);
// THEN
assertEquals(2, candidates.size());
assertEquals("candi", candidates.get(0).alias);
assertNull(candidates.get(0).fitzpatrick);
assertEquals("candidate", candidates.get(1).alias);
assertNull(candidates.get(1).fitzpatrick);
}
@Test
public void getAliasCanditates_with_two_aliases_sharing_a_colon() {
// GIVEN
String str = "test :candi:candidate: test";
// WHEN
List<AliasCandidate> candidates = EmojiParser.getAliasCandidates(str);
// THEN
assertEquals(2, candidates.size());
assertEquals("candi", candidates.get(0).alias);
assertNull(candidates.get(0).fitzpatrick);
assertEquals("candidate", candidates.get(1).alias);
assertNull(candidates.get(1).fitzpatrick);
}
@Test
public void getAliasCanditates_with_a_fitzpatrick_modifier() {
// GIVEN
String str = "test :candidate|type_3: test";
// WHEN
List<AliasCandidate> candidates = EmojiParser.getAliasCandidates(str);
// THEN
assertEquals(1, candidates.size());
assertEquals("candidate", candidates.get(0).alias);
assertEquals(Fitzpatrick.TYPE_3, candidates.get(0).fitzpatrick);
}
@Test
public void test_with_a_new_flag() {
String input = "Cuba has a new flag! :cu:";
String expected = "Cuba has a new flag! \uD83C\uDDE8\uD83C\uDDFA";
assertEquals(expected, EmojiParser.parseToUnicode(input));
assertEquals(input, EmojiParser.parseToAliases(expected));
}
@Test
public void removeAllEmojis_removes_all_the_emojis_from_the_string() {
// GIVEN
String input = "An 😀awesome 😃string 😄with " +
"a \uD83D\uDC66\uD83C\uDFFFfew 😉emojis!";
// WHEN
String result = EmojiParser.removeAllEmojis(input);
// THEN
String expected = "An awesome string with a few emojis!";
assertEquals(expected, result);
}
@Test
public void removeEmojis_only_removes_the_emojis_in_the_iterable_from_the_string() {
// GIVEN
String input = "An\uD83D\uDE03 awesome\uD83D\uDE04 string" +
"\uD83D\uDC4D\uD83C\uDFFF with\uD83D\uDCAA\uD83C\uDFFD a few emojis!";
List<Emoji> emojis = new ArrayList<Emoji>();
emojis.add(EmojiManager.getForAlias("smile"));
emojis.add(EmojiManager.getForAlias("+1"));
// WHEN
String result = EmojiParser.removeEmojis(input, emojis);
// THEN
String expected = "An\uD83D\uDE03 awesome string with" +
"\uD83D\uDCAA\uD83C\uDFFD a few emojis!";
assertEquals(expected, result);
}
@Test
public void removeAllEmojisExcept_removes_all_the_emojis_from_the_string_except_those_in_the_iterable() {
// GIVEN
String input = "An\uD83D\uDE03 awesome\uD83D\uDE04 string" +
"\uD83D\uDC4D\uD83C\uDFFF with\uD83D\uDCAA\uD83C\uDFFD a few emojis!";
List<Emoji> emojis = new ArrayList<Emoji>();
emojis.add(EmojiManager.getForAlias("smile"));
emojis.add(EmojiManager.getForAlias("+1"));
// WHEN
String result = EmojiParser.removeAllEmojisExcept(input, emojis);
// THEN
String expected = "An awesome\uD83D\uDE04 string\uD83D\uDC4D\uD83C\uDFFF " +
"with a few emojis!";
assertEquals(expected, result);
}
@Test
public void parseToUnicode_with_the_keycap_asterisk_emoji_replaces_the_alias_by_the_emoji() {
// GIVEN
String str = "Let's test the :keycap_asterisk: emoji and " +
"its other alias :star_keycap:";
// WHEN
String result = EmojiParser.parseToUnicode(str);
// THEN
assertEquals("Let's test the *⃣ emoji and its other alias *⃣", result);
}
@Test
public void parseToAliases_NG_and_nigeria() {
// GIVEN
String str = "Nigeria is 🇳🇬, NG is 🆖";
// WHEN
String result = EmojiParser.parseToAliases(str);
// THEN
assertEquals("Nigeria is :ng:, NG is :squared_ng:", result);
}
@Test
public void parseToAliases_couplekiss_woman_woman() {
// GIVEN
String str = "👩❤️💋👩";
// WHEN
String result = EmojiParser.parseToAliases(str);
// THEN
assertEquals(":couplekiss_woman_woman:", result);
}
@Test
public void extractEmojis() {
// GIVEN
String str = "An 😀awesome 😃string with a few 😉emojis!";
// WHEN
List<String> result = EmojiParser.extractEmojis(str);
// THEN
assertEquals("😀", result.get(0));
assertEquals("😃", result.get(1));
assertEquals("😉", result.get(2));
}
}