1*834a2baaSAndroid Build Coastguard Worker /*
2*834a2baaSAndroid Build Coastguard Worker * Copyright (C) 2016 The Android Open Source Project
3*834a2baaSAndroid Build Coastguard Worker *
4*834a2baaSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
5*834a2baaSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
6*834a2baaSAndroid Build Coastguard Worker * You may obtain a copy of the License at
7*834a2baaSAndroid Build Coastguard Worker *
8*834a2baaSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0
9*834a2baaSAndroid Build Coastguard Worker *
10*834a2baaSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
11*834a2baaSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
12*834a2baaSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*834a2baaSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
14*834a2baaSAndroid Build Coastguard Worker * limitations under the License.
15*834a2baaSAndroid Build Coastguard Worker */
16*834a2baaSAndroid Build Coastguard Worker
17*834a2baaSAndroid Build Coastguard Worker #include "minikin/Emoji.h"
18*834a2baaSAndroid Build Coastguard Worker
19*834a2baaSAndroid Build Coastguard Worker #include <gtest/gtest.h>
20*834a2baaSAndroid Build Coastguard Worker #include <unicode/uchar.h>
21*834a2baaSAndroid Build Coastguard Worker
22*834a2baaSAndroid Build Coastguard Worker namespace minikin {
23*834a2baaSAndroid Build Coastguard Worker
TEST(EmojiTest,isEmojiTest)24*834a2baaSAndroid Build Coastguard Worker TEST(EmojiTest, isEmojiTest) {
25*834a2baaSAndroid Build Coastguard Worker EXPECT_TRUE(isEmoji(0x0023)); // NUMBER SIGN
26*834a2baaSAndroid Build Coastguard Worker EXPECT_TRUE(isEmoji(0x0035)); // DIGIT FIVE
27*834a2baaSAndroid Build Coastguard Worker EXPECT_TRUE(isEmoji(0x2640)); // FEMALE SIGN
28*834a2baaSAndroid Build Coastguard Worker EXPECT_TRUE(isEmoji(0x2642)); // MALE SIGN
29*834a2baaSAndroid Build Coastguard Worker EXPECT_TRUE(isEmoji(0x2695)); // STAFF OF AESCULAPIUS
30*834a2baaSAndroid Build Coastguard Worker EXPECT_TRUE(isEmoji(0x1F0CF)); // PLAYING CARD BLACK JOKER
31*834a2baaSAndroid Build Coastguard Worker EXPECT_TRUE(isEmoji(0x1F1E9)); // REGIONAL INDICATOR SYMBOL LETTER D
32*834a2baaSAndroid Build Coastguard Worker EXPECT_TRUE(isEmoji(0x1F6F7)); // SLED
33*834a2baaSAndroid Build Coastguard Worker EXPECT_TRUE(isEmoji(0x1F9E6)); // SOCKS
34*834a2baaSAndroid Build Coastguard Worker
35*834a2baaSAndroid Build Coastguard Worker // Unicode 12.0
36*834a2baaSAndroid Build Coastguard Worker EXPECT_TRUE(isEmoji(0x1F6D5)); // HINDU TEMPLE
37*834a2baaSAndroid Build Coastguard Worker EXPECT_TRUE(isEmoji(0x1F7E7)); // ORANGE SQUARE
38*834a2baaSAndroid Build Coastguard Worker EXPECT_TRUE(isEmoji(0x1F9CF)); // DEAF PERSON
39*834a2baaSAndroid Build Coastguard Worker EXPECT_TRUE(isEmoji(0x1F9CE)); // PERSON KNEELING
40*834a2baaSAndroid Build Coastguard Worker EXPECT_TRUE(isEmoji(0x1F9A6)); // OTTER
41*834a2baaSAndroid Build Coastguard Worker EXPECT_TRUE(isEmoji(0x1F9A9)); // FLAMINGO
42*834a2baaSAndroid Build Coastguard Worker EXPECT_TRUE(isEmoji(0x1F9C6)); // FALAFEL
43*834a2baaSAndroid Build Coastguard Worker EXPECT_TRUE(isEmoji(0x1F9AA)); // OYSTER
44*834a2baaSAndroid Build Coastguard Worker EXPECT_TRUE(isEmoji(0x1FA82)); // PARACHUTE
45*834a2baaSAndroid Build Coastguard Worker EXPECT_TRUE(isEmoji(0x1FA80)); // YO-YO
46*834a2baaSAndroid Build Coastguard Worker EXPECT_TRUE(isEmoji(0x1FA70)); // BALLET SHOES
47*834a2baaSAndroid Build Coastguard Worker EXPECT_TRUE(isEmoji(0x1FA79)); // ADHESIVE BANDAGE
48*834a2baaSAndroid Build Coastguard Worker
49*834a2baaSAndroid Build Coastguard Worker // Unicode 13.0
50*834a2baaSAndroid Build Coastguard Worker EXPECT_TRUE(isEmoji(0x1F6D6)); // HUT
51*834a2baaSAndroid Build Coastguard Worker EXPECT_TRUE(isEmoji(0x1F977)); // NINJA
52*834a2baaSAndroid Build Coastguard Worker EXPECT_TRUE(isEmoji(0x1F9A3)); // MAMMOTH
53*834a2baaSAndroid Build Coastguard Worker EXPECT_TRUE(isEmoji(0x1FA74)); // THONG SANDAL
54*834a2baaSAndroid Build Coastguard Worker EXPECT_TRUE(isEmoji(0x1FAC2)); // PEOPLE HUGGING
55*834a2baaSAndroid Build Coastguard Worker EXPECT_TRUE(isEmoji(0x1FAD6)); // TEAPOT
56*834a2baaSAndroid Build Coastguard Worker
57*834a2baaSAndroid Build Coastguard Worker EXPECT_FALSE(isEmoji(0x0000)); // <control>
58*834a2baaSAndroid Build Coastguard Worker EXPECT_FALSE(isEmoji(0x0061)); // LATIN SMALL LETTER A
59*834a2baaSAndroid Build Coastguard Worker EXPECT_FALSE(isEmoji(0x1F93B)); // MODERN PENTATHLON
60*834a2baaSAndroid Build Coastguard Worker EXPECT_FALSE(isEmoji(0x1F946)); // RIFLE
61*834a2baaSAndroid Build Coastguard Worker EXPECT_FALSE(isEmoji(0x29E3D)); // A han character.
62*834a2baaSAndroid Build Coastguard Worker }
63*834a2baaSAndroid Build Coastguard Worker
TEST(EmojiTest,isEmojiModifierTest)64*834a2baaSAndroid Build Coastguard Worker TEST(EmojiTest, isEmojiModifierTest) {
65*834a2baaSAndroid Build Coastguard Worker EXPECT_TRUE(isEmojiModifier(0x1F3FB)); // EMOJI MODIFIER FITZPATRICK TYPE-1-2
66*834a2baaSAndroid Build Coastguard Worker EXPECT_TRUE(isEmojiModifier(0x1F3FC)); // EMOJI MODIFIER FITZPATRICK TYPE-3
67*834a2baaSAndroid Build Coastguard Worker EXPECT_TRUE(isEmojiModifier(0x1F3FD)); // EMOJI MODIFIER FITZPATRICK TYPE-4
68*834a2baaSAndroid Build Coastguard Worker EXPECT_TRUE(isEmojiModifier(0x1F3FE)); // EMOJI MODIFIER FITZPATRICK TYPE-5
69*834a2baaSAndroid Build Coastguard Worker EXPECT_TRUE(isEmojiModifier(0x1F3FF)); // EMOJI MODIFIER FITZPATRICK TYPE-6
70*834a2baaSAndroid Build Coastguard Worker
71*834a2baaSAndroid Build Coastguard Worker EXPECT_FALSE(isEmojiModifier(0x0000)); // <control>
72*834a2baaSAndroid Build Coastguard Worker EXPECT_FALSE(isEmojiModifier(0x1F3FA)); // AMPHORA
73*834a2baaSAndroid Build Coastguard Worker EXPECT_FALSE(isEmojiModifier(0x1F400)); // RAT
74*834a2baaSAndroid Build Coastguard Worker EXPECT_FALSE(isEmojiModifier(0x29E3D)); // A han character.
75*834a2baaSAndroid Build Coastguard Worker }
76*834a2baaSAndroid Build Coastguard Worker
TEST(EmojiTest,isEmojiBaseTest)77*834a2baaSAndroid Build Coastguard Worker TEST(EmojiTest, isEmojiBaseTest) {
78*834a2baaSAndroid Build Coastguard Worker EXPECT_TRUE(isEmojiBase(0x261D)); // WHITE UP POINTING INDEX
79*834a2baaSAndroid Build Coastguard Worker EXPECT_TRUE(isEmojiBase(0x270D)); // WRITING HAND
80*834a2baaSAndroid Build Coastguard Worker EXPECT_TRUE(isEmojiBase(0x1F385)); // FATHER CHRISTMAS
81*834a2baaSAndroid Build Coastguard Worker EXPECT_TRUE(isEmojiBase(0x1F3C2)); // SNOWBOARDER
82*834a2baaSAndroid Build Coastguard Worker EXPECT_TRUE(isEmojiBase(0x1F3C7)); // HORSE RACING
83*834a2baaSAndroid Build Coastguard Worker EXPECT_TRUE(isEmojiBase(0x1F3CC)); // GOLFER
84*834a2baaSAndroid Build Coastguard Worker EXPECT_TRUE(isEmojiBase(0x1F574)); // MAN IN BUSINESS SUIT LEVITATING
85*834a2baaSAndroid Build Coastguard Worker EXPECT_TRUE(isEmojiBase(0x1F6CC)); // SLEEPING ACCOMMODATION
86*834a2baaSAndroid Build Coastguard Worker EXPECT_TRUE(isEmojiBase(0x1F91D)); // HANDSHAKE (removed from Emoji 4.0, but we need it)
87*834a2baaSAndroid Build Coastguard Worker EXPECT_TRUE(isEmojiBase(0x1F91F)); // I LOVE YOU HAND SIGN
88*834a2baaSAndroid Build Coastguard Worker EXPECT_TRUE(isEmojiBase(0x1F931)); // BREAST-FEEDING
89*834a2baaSAndroid Build Coastguard Worker EXPECT_TRUE(isEmojiBase(0x1F932)); // PALMS UP TOGETHER
90*834a2baaSAndroid Build Coastguard Worker EXPECT_TRUE(isEmojiBase(0x1F93C)); // WRESTLERS (removed from Emoji 4.0, but we need it)
91*834a2baaSAndroid Build Coastguard Worker EXPECT_TRUE(isEmojiBase(0x1F9D1)); // ADULT
92*834a2baaSAndroid Build Coastguard Worker EXPECT_TRUE(isEmojiBase(0x1F9DD)); // ELF
93*834a2baaSAndroid Build Coastguard Worker
94*834a2baaSAndroid Build Coastguard Worker EXPECT_TRUE(isEmojiBase(0x1F9B5)); // LEG
95*834a2baaSAndroid Build Coastguard Worker EXPECT_TRUE(isEmojiBase(0x1F9B6)); // FOOT
96*834a2baaSAndroid Build Coastguard Worker EXPECT_TRUE(isEmojiBase(0x1F9B8)); // SUPERHERO
97*834a2baaSAndroid Build Coastguard Worker EXPECT_TRUE(isEmojiBase(0x1F9B9)); // SUPERVILLAIN
98*834a2baaSAndroid Build Coastguard Worker
99*834a2baaSAndroid Build Coastguard Worker // Unicode 12
100*834a2baaSAndroid Build Coastguard Worker EXPECT_TRUE(isEmojiBase(0x1F90F)); // PINCHING HAND
101*834a2baaSAndroid Build Coastguard Worker EXPECT_TRUE(isEmojiBase(0x1F9BB)); // EAR WITH HEARING AID
102*834a2baaSAndroid Build Coastguard Worker EXPECT_TRUE(isEmojiBase(0x1F9CD)); // PERSON STANDING
103*834a2baaSAndroid Build Coastguard Worker EXPECT_TRUE(isEmojiBase(0x1F9CF)); // DEAF PERSON
104*834a2baaSAndroid Build Coastguard Worker
105*834a2baaSAndroid Build Coastguard Worker // Unicode 13
106*834a2baaSAndroid Build Coastguard Worker EXPECT_TRUE(isEmojiBase(0x1F90C)); // PINCHED FINGERS
107*834a2baaSAndroid Build Coastguard Worker EXPECT_TRUE(isEmojiBase(0x1F977)); // NINJA
108*834a2baaSAndroid Build Coastguard Worker
109*834a2baaSAndroid Build Coastguard Worker EXPECT_FALSE(isEmojiBase(0x0000)); // <control>
110*834a2baaSAndroid Build Coastguard Worker EXPECT_FALSE(isEmojiBase(0x261C)); // WHITE LEFT POINTING INDEX
111*834a2baaSAndroid Build Coastguard Worker EXPECT_FALSE(isEmojiBase(0x1F384)); // CHRISTMAS TREE
112*834a2baaSAndroid Build Coastguard Worker EXPECT_FALSE(isEmojiBase(0x1F9DE)); // GENIE
113*834a2baaSAndroid Build Coastguard Worker EXPECT_FALSE(isEmojiBase(0x29E3D)); // A han character.
114*834a2baaSAndroid Build Coastguard Worker }
115*834a2baaSAndroid Build Coastguard Worker
TEST(EmojiTest,emojiBidiOverrideTest)116*834a2baaSAndroid Build Coastguard Worker TEST(EmojiTest, emojiBidiOverrideTest) {
117*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(U_RIGHT_TO_LEFT, emojiBidiOverride(nullptr, 0x05D0)); // HEBREW LETTER ALEF
118*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(U_LEFT_TO_RIGHT,
119*834a2baaSAndroid Build Coastguard Worker emojiBidiOverride(nullptr, 0x1F170)); // NEGATIVE SQUARED LATIN CAPITAL LETTER A
120*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(U_OTHER_NEUTRAL, emojiBidiOverride(nullptr, 0x1F6F7)); // SLED
121*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(U_OTHER_NEUTRAL, emojiBidiOverride(nullptr, 0x1F9E6)); // SOCKS
122*834a2baaSAndroid Build Coastguard Worker }
123*834a2baaSAndroid Build Coastguard Worker
124*834a2baaSAndroid Build Coastguard Worker } // namespace minikin
125