177f488345316fba46c271fc04bea470819ae1712Seigo Nonaka/*
277f488345316fba46c271fc04bea470819ae1712Seigo Nonaka * Copyright (C) 2016 The Android Open Source Project
377f488345316fba46c271fc04bea470819ae1712Seigo Nonaka *
477f488345316fba46c271fc04bea470819ae1712Seigo Nonaka * Licensed under the Apache License, Version 2.0 (the "License");
577f488345316fba46c271fc04bea470819ae1712Seigo Nonaka * you may not use this file except in compliance with the License.
677f488345316fba46c271fc04bea470819ae1712Seigo Nonaka * You may obtain a copy of the License at
777f488345316fba46c271fc04bea470819ae1712Seigo Nonaka *
877f488345316fba46c271fc04bea470819ae1712Seigo Nonaka *      http://www.apache.org/licenses/LICENSE-2.0
977f488345316fba46c271fc04bea470819ae1712Seigo Nonaka *
1077f488345316fba46c271fc04bea470819ae1712Seigo Nonaka * Unless required by applicable law or agreed to in writing, software
1177f488345316fba46c271fc04bea470819ae1712Seigo Nonaka * distributed under the License is distributed on an "AS IS" BASIS,
1277f488345316fba46c271fc04bea470819ae1712Seigo Nonaka * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1377f488345316fba46c271fc04bea470819ae1712Seigo Nonaka * See the License for the specific language governing permissions and
1477f488345316fba46c271fc04bea470819ae1712Seigo Nonaka * limitations under the License.
1577f488345316fba46c271fc04bea470819ae1712Seigo Nonaka */
1677f488345316fba46c271fc04bea470819ae1712Seigo Nonaka
1777f488345316fba46c271fc04bea470819ae1712Seigo Nonaka#include <gtest/gtest.h>
1877f488345316fba46c271fc04bea470819ae1712Seigo Nonaka
19754913bd274b32ad66c1dfcf3bd592bb6c8c01bdRoozbeh Pournader#include <unicode/uchar.h>
20754913bd274b32ad66c1dfcf3bd592bb6c8c01bdRoozbeh Pournader
21bab3b98ceb29fa3fc5d8832284312859d7f32cc7Roozbeh Pournader#include <minikin/Emoji.h>
2277f488345316fba46c271fc04bea470819ae1712Seigo Nonaka
2314e2d136aaef271ba131f917cf5f27baa31ae5adSeigo Nonakanamespace minikin {
2477f488345316fba46c271fc04bea470819ae1712Seigo Nonaka
25bab3b98ceb29fa3fc5d8832284312859d7f32cc7Roozbeh PournaderTEST(EmojiTest, isEmojiTest) {
2677f488345316fba46c271fc04bea470819ae1712Seigo Nonaka    EXPECT_TRUE(isEmoji(0x0023));  // NUMBER SIGN
2777f488345316fba46c271fc04bea470819ae1712Seigo Nonaka    EXPECT_TRUE(isEmoji(0x0035));  // DIGIT FIVE
28754913bd274b32ad66c1dfcf3bd592bb6c8c01bdRoozbeh Pournader    EXPECT_TRUE(isEmoji(0x2640));  // FEMALE SIGN
29754913bd274b32ad66c1dfcf3bd592bb6c8c01bdRoozbeh Pournader    EXPECT_TRUE(isEmoji(0x2642));  // MALE SIGN
30754913bd274b32ad66c1dfcf3bd592bb6c8c01bdRoozbeh Pournader    EXPECT_TRUE(isEmoji(0x2695));  // STAFF OF AESCULAPIUS
3177f488345316fba46c271fc04bea470819ae1712Seigo Nonaka    EXPECT_TRUE(isEmoji(0x1F0CF));  // PLAYING CARD BLACK JOKER
3277f488345316fba46c271fc04bea470819ae1712Seigo Nonaka    EXPECT_TRUE(isEmoji(0x1F1E9));  // REGIONAL INDICATOR SYMBOL LETTER D
33754913bd274b32ad66c1dfcf3bd592bb6c8c01bdRoozbeh Pournader    EXPECT_TRUE(isEmoji(0x1F6F7));  // SLED
34754913bd274b32ad66c1dfcf3bd592bb6c8c01bdRoozbeh Pournader    EXPECT_TRUE(isEmoji(0x1F9E6));  // SOCKS
3577f488345316fba46c271fc04bea470819ae1712Seigo Nonaka
3677f488345316fba46c271fc04bea470819ae1712Seigo Nonaka    EXPECT_FALSE(isEmoji(0x0000));  // <control>
3777f488345316fba46c271fc04bea470819ae1712Seigo Nonaka    EXPECT_FALSE(isEmoji(0x0061));  // LATIN SMALL LETTER A
38754913bd274b32ad66c1dfcf3bd592bb6c8c01bdRoozbeh Pournader    EXPECT_FALSE(isEmoji(0x1F93B));  // MODERN PENTATHLON
39754913bd274b32ad66c1dfcf3bd592bb6c8c01bdRoozbeh Pournader    EXPECT_FALSE(isEmoji(0x1F946));  // RIFLE
4077f488345316fba46c271fc04bea470819ae1712Seigo Nonaka    EXPECT_FALSE(isEmoji(0x29E3D));  // A han character.
4177f488345316fba46c271fc04bea470819ae1712Seigo Nonaka}
4277f488345316fba46c271fc04bea470819ae1712Seigo Nonaka
43bab3b98ceb29fa3fc5d8832284312859d7f32cc7Roozbeh PournaderTEST(EmojiTest, isEmojiModifierTest) {
44754913bd274b32ad66c1dfcf3bd592bb6c8c01bdRoozbeh Pournader    EXPECT_TRUE(isEmojiModifier(0x1F3FB));  // EMOJI MODIFIER FITZPATRICK TYPE-1-2
45754913bd274b32ad66c1dfcf3bd592bb6c8c01bdRoozbeh Pournader    EXPECT_TRUE(isEmojiModifier(0x1F3FC));  // EMOJI MODIFIER FITZPATRICK TYPE-3
46754913bd274b32ad66c1dfcf3bd592bb6c8c01bdRoozbeh Pournader    EXPECT_TRUE(isEmojiModifier(0x1F3FD));  // EMOJI MODIFIER FITZPATRICK TYPE-4
47754913bd274b32ad66c1dfcf3bd592bb6c8c01bdRoozbeh Pournader    EXPECT_TRUE(isEmojiModifier(0x1F3FE));  // EMOJI MODIFIER FITZPATRICK TYPE-5
48754913bd274b32ad66c1dfcf3bd592bb6c8c01bdRoozbeh Pournader    EXPECT_TRUE(isEmojiModifier(0x1F3FF));  // EMOJI MODIFIER FITZPATRICK TYPE-6
49754913bd274b32ad66c1dfcf3bd592bb6c8c01bdRoozbeh Pournader
50754913bd274b32ad66c1dfcf3bd592bb6c8c01bdRoozbeh Pournader    EXPECT_FALSE(isEmojiModifier(0x0000));  // <control>
51754913bd274b32ad66c1dfcf3bd592bb6c8c01bdRoozbeh Pournader    EXPECT_FALSE(isEmojiModifier(0x1F3FA));  // AMPHORA
52754913bd274b32ad66c1dfcf3bd592bb6c8c01bdRoozbeh Pournader    EXPECT_FALSE(isEmojiModifier(0x1F400));  // RAT
53754913bd274b32ad66c1dfcf3bd592bb6c8c01bdRoozbeh Pournader    EXPECT_FALSE(isEmojiModifier(0x29E3D));  // A han character.
54754913bd274b32ad66c1dfcf3bd592bb6c8c01bdRoozbeh Pournader}
55754913bd274b32ad66c1dfcf3bd592bb6c8c01bdRoozbeh Pournader
56bab3b98ceb29fa3fc5d8832284312859d7f32cc7Roozbeh PournaderTEST(EmojiTest, isEmojiBaseTest) {
57754913bd274b32ad66c1dfcf3bd592bb6c8c01bdRoozbeh Pournader    EXPECT_TRUE(isEmojiBase(0x261D));  // WHITE UP POINTING INDEX
58754913bd274b32ad66c1dfcf3bd592bb6c8c01bdRoozbeh Pournader    EXPECT_TRUE(isEmojiBase(0x270D));  // WRITING HAND
59754913bd274b32ad66c1dfcf3bd592bb6c8c01bdRoozbeh Pournader    EXPECT_TRUE(isEmojiBase(0x1F385));  // FATHER CHRISTMAS
60754913bd274b32ad66c1dfcf3bd592bb6c8c01bdRoozbeh Pournader    EXPECT_TRUE(isEmojiBase(0x1F3C2));  // SNOWBOARDER
61754913bd274b32ad66c1dfcf3bd592bb6c8c01bdRoozbeh Pournader    EXPECT_TRUE(isEmojiBase(0x1F3C7));  // HORSE RACING
62754913bd274b32ad66c1dfcf3bd592bb6c8c01bdRoozbeh Pournader    EXPECT_TRUE(isEmojiBase(0x1F3CC));  // GOLFER
63754913bd274b32ad66c1dfcf3bd592bb6c8c01bdRoozbeh Pournader    EXPECT_TRUE(isEmojiBase(0x1F574));  // MAN IN BUSINESS SUIT LEVITATING
64754913bd274b32ad66c1dfcf3bd592bb6c8c01bdRoozbeh Pournader    EXPECT_TRUE(isEmojiBase(0x1F6CC));  // SLEEPING ACCOMMODATION
65754913bd274b32ad66c1dfcf3bd592bb6c8c01bdRoozbeh Pournader    EXPECT_TRUE(isEmojiBase(0x1F91D));  // HANDSHAKE (removed from Emoji 4.0, but we need it)
66754913bd274b32ad66c1dfcf3bd592bb6c8c01bdRoozbeh Pournader    EXPECT_TRUE(isEmojiBase(0x1F91F));  // I LOVE YOU HAND SIGN
67754913bd274b32ad66c1dfcf3bd592bb6c8c01bdRoozbeh Pournader    EXPECT_TRUE(isEmojiBase(0x1F931));  // BREAST-FEEDING
68754913bd274b32ad66c1dfcf3bd592bb6c8c01bdRoozbeh Pournader    EXPECT_TRUE(isEmojiBase(0x1F932));  // PALMS UP TOGETHER
69754913bd274b32ad66c1dfcf3bd592bb6c8c01bdRoozbeh Pournader    EXPECT_TRUE(isEmojiBase(0x1F93C));  // WRESTLERS (removed from Emoji 4.0, but we need it)
70754913bd274b32ad66c1dfcf3bd592bb6c8c01bdRoozbeh Pournader    EXPECT_TRUE(isEmojiBase(0x1F9D1));  // ADULT
71754913bd274b32ad66c1dfcf3bd592bb6c8c01bdRoozbeh Pournader    EXPECT_TRUE(isEmojiBase(0x1F9DD));  // ELF
72754913bd274b32ad66c1dfcf3bd592bb6c8c01bdRoozbeh Pournader
73754913bd274b32ad66c1dfcf3bd592bb6c8c01bdRoozbeh Pournader    EXPECT_FALSE(isEmojiBase(0x0000));  // <control>
74754913bd274b32ad66c1dfcf3bd592bb6c8c01bdRoozbeh Pournader    EXPECT_FALSE(isEmojiBase(0x261C));  // WHITE LEFT POINTING INDEX
75754913bd274b32ad66c1dfcf3bd592bb6c8c01bdRoozbeh Pournader    EXPECT_FALSE(isEmojiBase(0x1F384));  // CHRISTMAS TREE
76754913bd274b32ad66c1dfcf3bd592bb6c8c01bdRoozbeh Pournader    EXPECT_FALSE(isEmojiBase(0x1F9DE));  // GENIE
77754913bd274b32ad66c1dfcf3bd592bb6c8c01bdRoozbeh Pournader    EXPECT_FALSE(isEmojiBase(0x29E3D));  // A han character.
78754913bd274b32ad66c1dfcf3bd592bb6c8c01bdRoozbeh Pournader}
79754913bd274b32ad66c1dfcf3bd592bb6c8c01bdRoozbeh Pournader
80bab3b98ceb29fa3fc5d8832284312859d7f32cc7Roozbeh PournaderTEST(EmojiTest, emojiBidiOverrideTest) {
81bab3b98ceb29fa3fc5d8832284312859d7f32cc7Roozbeh Pournader    EXPECT_EQ(U_RIGHT_TO_LEFT, emojiBidiOverride(nullptr, 0x05D0));  // HEBREW LETTER ALEF
82bab3b98ceb29fa3fc5d8832284312859d7f32cc7Roozbeh Pournader    EXPECT_EQ(U_LEFT_TO_RIGHT,
83bab3b98ceb29fa3fc5d8832284312859d7f32cc7Roozbeh Pournader            emojiBidiOverride(nullptr, 0x1F170));  // NEGATIVE SQUARED LATIN CAPITAL LETTER A
84bab3b98ceb29fa3fc5d8832284312859d7f32cc7Roozbeh Pournader    EXPECT_EQ(U_OTHER_NEUTRAL, emojiBidiOverride(nullptr, 0x1F6F7));  // SLED
85bab3b98ceb29fa3fc5d8832284312859d7f32cc7Roozbeh Pournader    EXPECT_EQ(U_OTHER_NEUTRAL, emojiBidiOverride(nullptr, 0x1F9E6));  // SOCKS
86bab3b98ceb29fa3fc5d8832284312859d7f32cc7Roozbeh Pournader}
87bab3b98ceb29fa3fc5d8832284312859d7f32cc7Roozbeh Pournader
8814e2d136aaef271ba131f917cf5f27baa31ae5adSeigo Nonaka}  // namespace minikin
89