mirror of https://github.com/status-im/gomoji.git
292 lines
5.7 KiB
Go
292 lines
5.7 KiB
Go
package gomoji
|
||
|
||
import (
|
||
"reflect"
|
||
"testing"
|
||
)
|
||
|
||
func TestContainsEmoji(t *testing.T) {
|
||
tests := []struct {
|
||
name string
|
||
inputStr string
|
||
want bool
|
||
}{
|
||
{
|
||
name: "empty input string",
|
||
inputStr: "",
|
||
want: false,
|
||
},
|
||
{
|
||
name: "string without emoji",
|
||
inputStr: "hello! This is a simple string without any emoji",
|
||
want: false,
|
||
},
|
||
{
|
||
name: "numbers in string",
|
||
inputStr: "qwerty1",
|
||
want: false,
|
||
},
|
||
{
|
||
name: "emoji number in string",
|
||
inputStr: "qwerty1️⃣",
|
||
want: true,
|
||
},
|
||
{
|
||
name: "only emoji in string",
|
||
inputStr: `🥰`,
|
||
want: true,
|
||
},
|
||
{
|
||
name: "emoji in the middle of a string",
|
||
inputStr: `hi 😀 how r u?`,
|
||
want: true,
|
||
},
|
||
{
|
||
name: "emoji in the end of a string",
|
||
inputStr: `hi! how r u doing?🤔`,
|
||
want: true,
|
||
},
|
||
{
|
||
name: "heart emoji in string",
|
||
inputStr: "I ❤️ you",
|
||
want: true,
|
||
},
|
||
{
|
||
name: "it determines the skintone emojis",
|
||
inputStr: "I 👍🏿 you",
|
||
want: true,
|
||
},
|
||
{
|
||
name: "double exclamation mark in text",
|
||
inputStr: "Hello!!",
|
||
want: false,
|
||
},
|
||
{
|
||
name: "double exclamation mark emoji in text",
|
||
inputStr: "Hello‼",
|
||
want: true,
|
||
},
|
||
{
|
||
name: "emoji keycap # in text",
|
||
inputStr: "Just type #⃣",
|
||
want: true,
|
||
},
|
||
{
|
||
name: "text keycap # in text",
|
||
inputStr: "Just type #",
|
||
want: false,
|
||
},
|
||
}
|
||
for _, tt := range tests {
|
||
t.Run(tt.name, func(t *testing.T) {
|
||
if got := ContainsEmoji(tt.inputStr); got != tt.want {
|
||
t.Errorf("ContainsEmoji() = %v, want %v", got, tt.want)
|
||
}
|
||
})
|
||
}
|
||
}
|
||
|
||
func BenchmarkContainsEmojiParallel(b *testing.B) {
|
||
b.RunParallel(func(pb *testing.PB) {
|
||
for pb.Next() {
|
||
ContainsEmoji("Hi \U0001F970")
|
||
}
|
||
})
|
||
}
|
||
|
||
func BenchmarkContainsEmoji(b *testing.B) {
|
||
for i := 0; i < b.N; i++ {
|
||
ContainsEmoji("Hi \U0001F970")
|
||
}
|
||
}
|
||
|
||
func TestRemoveEmojis(t *testing.T) {
|
||
tests := []struct {
|
||
name string
|
||
inputStr string
|
||
want string
|
||
}{
|
||
{
|
||
name: "string without emoji",
|
||
inputStr: "string without emoji",
|
||
want: "string without emoji",
|
||
},
|
||
{
|
||
name: "string with numbers",
|
||
inputStr: "1qwerty2",
|
||
want: "1qwerty2",
|
||
},
|
||
{
|
||
name: "string with emoji numbers",
|
||
inputStr: "1️⃣qwerty2",
|
||
want: "qwerty2",
|
||
},
|
||
{
|
||
name: "string with emojis",
|
||
inputStr: "❤️🛶😂",
|
||
want: "",
|
||
},
|
||
{
|
||
name: "string with unicode 14 emoji",
|
||
inputStr: "te\U0001FAB7st",
|
||
want: "test",
|
||
},
|
||
{
|
||
name: "remove rare emojis",
|
||
inputStr: "🧖 hello 🦋world",
|
||
want: "hello world",
|
||
},
|
||
}
|
||
for _, tt := range tests {
|
||
t.Run(tt.name, func(t *testing.T) {
|
||
if got := RemoveEmojis(tt.inputStr); got != tt.want {
|
||
t.Errorf("RemoveEmojis() = %v, want %v", got, tt.want)
|
||
}
|
||
})
|
||
}
|
||
}
|
||
|
||
func BenchmarkRemoveEmojisParallel(b *testing.B) {
|
||
b.RunParallel(func(pb *testing.PB) {
|
||
for pb.Next() {
|
||
RemoveEmojis("\U0001F96F Hi \U0001F970")
|
||
}
|
||
})
|
||
}
|
||
|
||
func BenchmarkRemoveEmojis(b *testing.B) {
|
||
for i := 0; i < b.N; i++ {
|
||
RemoveEmojis("\U0001F96F Hi \U0001F970")
|
||
}
|
||
}
|
||
|
||
func TestGetInfo(t *testing.T) {
|
||
tests := []struct {
|
||
name string
|
||
inputEmoji string
|
||
want Emoji
|
||
wantErr bool
|
||
}{
|
||
{
|
||
name: "just a number",
|
||
inputEmoji: "1",
|
||
want: Emoji{},
|
||
wantErr: true,
|
||
},
|
||
{
|
||
name: "valid emoji number",
|
||
inputEmoji: "1️⃣",
|
||
want: Emoji{
|
||
Slug: "keycap-1",
|
||
Character: "1️⃣",
|
||
UnicodeName: "E0.6 keycap: 1",
|
||
CodePoint: "0031 FE0F 20E3",
|
||
Group: "Symbols",
|
||
SubGroup: "keycap",
|
||
},
|
||
wantErr: false,
|
||
},
|
||
{
|
||
name: "unicode 14",
|
||
inputEmoji: "\U0001FAAC",
|
||
want: Emoji{
|
||
Slug: "hamsa",
|
||
Character: "🪬",
|
||
UnicodeName: "E14.0 hamsa",
|
||
CodePoint: "1FAAC",
|
||
Group: "Activities",
|
||
SubGroup: "game",
|
||
},
|
||
wantErr: false,
|
||
},
|
||
}
|
||
for _, tt := range tests {
|
||
t.Run(tt.name, func(t *testing.T) {
|
||
got, err := GetInfo(tt.inputEmoji)
|
||
if (err != nil) != tt.wantErr {
|
||
t.Errorf("GetInfo() error = %v, wantErr %v", err, tt.wantErr)
|
||
return
|
||
}
|
||
if !reflect.DeepEqual(got, tt.want) {
|
||
t.Errorf("GetInfo() got = %v, want %v", got, tt.want)
|
||
}
|
||
})
|
||
}
|
||
}
|
||
|
||
func BenchmarkGetInfoParallel(b *testing.B) {
|
||
b.RunParallel(func(pb *testing.PB) {
|
||
for pb.Next() {
|
||
GetInfo("\U0001F96F") // nolint:errcheck
|
||
}
|
||
})
|
||
}
|
||
|
||
func BenchmarkGetInfo(b *testing.B) {
|
||
for i := 0; i < b.N; i++ {
|
||
GetInfo("\U0001F96F") // nolint:errcheck
|
||
}
|
||
}
|
||
|
||
func TestFindAll(t *testing.T) {
|
||
tests := []struct {
|
||
name string
|
||
inputStr string
|
||
want []Emoji
|
||
}{
|
||
{
|
||
name: "empty string",
|
||
inputStr: "",
|
||
want: nil,
|
||
},
|
||
{
|
||
name: "string without emoji",
|
||
inputStr: "hello world",
|
||
want: nil,
|
||
},
|
||
{
|
||
name: "string with 2 emoji",
|
||
inputStr: "hello 🦋 world \U0001F9FB",
|
||
want: []Emoji{
|
||
{
|
||
Slug: "butterfly",
|
||
Character: "🦋",
|
||
UnicodeName: "E3.0 butterfly",
|
||
CodePoint: "1F98B",
|
||
Group: "Animals & Nature",
|
||
SubGroup: "animal-bug",
|
||
},
|
||
{
|
||
Slug: "roll-of-paper",
|
||
Character: "🧻",
|
||
UnicodeName: "E11.0 roll of paper",
|
||
CodePoint: "1F9FB",
|
||
Group: "Objects",
|
||
SubGroup: "household",
|
||
},
|
||
},
|
||
},
|
||
}
|
||
for _, tt := range tests {
|
||
t.Run(tt.name, func(t *testing.T) {
|
||
if got := FindAll(tt.inputStr); !reflect.DeepEqual(got, tt.want) {
|
||
t.Errorf("FindAll() = %v, want %v", got, tt.want)
|
||
}
|
||
})
|
||
}
|
||
}
|
||
|
||
func BenchmarkFindAllParallel(b *testing.B) {
|
||
b.RunParallel(func(pb *testing.PB) {
|
||
for pb.Next() {
|
||
FindAll("\U0001F96F Hi \U0001F970")
|
||
}
|
||
})
|
||
}
|
||
|
||
func BenchmarkFindAll(b *testing.B) {
|
||
for i := 0; i < b.N; i++ {
|
||
FindAll("\U0001F96F Hi \U0001F970")
|
||
}
|
||
}
|