Files
MujicaUI/messaging/emoji_picker_test.go
T

145 lines
3.6 KiB
Go

package messaging
import (
"slices"
"testing"
"github.com/egoist/mygo/ui"
"git.zacharyzhang.com/ZacharyZhang-NY/MujicaUI/core"
)
func TestEmojiPickerPickSearchToneRecent(t *testing.T) {
var recent []string
tone := 0
var picked []string
tt := ui.NewTester(func(c *ui.Context) {
core.Use(c, core.Settings{})
if r := EmojiPicker(c, EmojiPickerOptions{Recent: &recent, Tone: &tone}); r.Picked != "" {
picked = append(picked, r.Picked)
}
}, 400, 500)
if err := tt.Click("People"); err != nil {
t.Fatal(err)
}
if err := tt.Click("Skin tone 3"); err != nil {
t.Fatal(err)
}
if err := tt.Click("thumbs up"); err != nil {
t.Fatal(err)
}
if len(picked) != 1 || picked[0] != "👍\U0001F3FD" || tone != 3 {
t.Fatalf("picked %q tone %d", picked, tone)
}
if err := tt.Click("Search emoji"); err != nil {
t.Fatal(err)
}
tt.Type("wine")
if err := tt.Click("wine glass"); err != nil {
t.Fatal(err)
}
if !slices.Equal(recent, []string{"🍷", "👍\U0001F3FD"}) {
t.Fatalf("recent %q", recent)
}
if err := tt.Click("Search emoji"); err != nil {
t.Fatal(err)
}
tt.Type("zzzz")
if !tt.HasText("No emoji found") {
t.Fatal("no empty search state")
}
}
func TestEmojiPickerKeyboardAndDisabled(t *testing.T) {
var got string
tt := ui.NewTester(func(c *ui.Context) {
core.Use(c, core.Settings{})
if r := EmojiPicker(c, EmojiPickerOptions{}); r.Picked != "" {
got = r.Picked
}
}, 400, 500)
if err := tt.Click("grinning face"); err != nil {
t.Fatal(err)
}
tt.Key(0, ui.KeyRight)
tt.Key(0, ui.KeyEnter)
if got != "😄" {
t.Fatalf("Right, Enter picked %q", got)
}
got = ""
off := ui.NewTester(func(c *ui.Context) {
core.Use(c, core.Settings{})
if r := EmojiPicker(c, EmojiPickerOptions{Disabled: true}); r.Picked != "" {
got = r.Picked
}
}, 400, 500)
_ = off.Click("grinning face")
if got != "" {
t.Fatal("disabled picker picked")
}
bad := 9
mediaPanics(t, "tone", func(c *ui.Context) { EmojiPicker(c, EmojiPickerOptions{Tone: &bad}) })
}
func TestEmojiPickerSnapshot(t *testing.T) {
recent := []string{"🌹", "🍷"}
tone := 0
snapshot(t, "emoji_picker", 360, 400, func(c *ui.Context) {
ui.Column(c).Padding(20).Children(func() { EmojiPicker(c, EmojiPickerOptions{Recent: &recent, Tone: &tone}) })
})
}
func TestEmojiPickerKeepsCategoryAfterFirstPick(t *testing.T) {
var recent []string
tt := ui.NewTester(func(c *ui.Context) {
core.Use(c, core.Settings{})
EmojiPicker(c, EmojiPickerOptions{Recent: &recent})
}, 400, 400)
if err := tt.Click("People"); err != nil {
t.Fatal(err)
}
if err := tt.Click("thumbs up"); err != nil {
t.Fatal(err)
}
if _, ok := tt.Find("waving hand"); !ok {
t.Fatal("first pick changed the category")
}
if err := tt.Click("Recent"); err != nil {
t.Fatal(err)
}
if _, ok := tt.Find("👍"); !ok {
t.Fatal("recent pick missing")
}
}
func TestEmojiPickerChineseSearch(t *testing.T) {
picked := ""
tt := ui.NewTester(func(c *ui.Context) {
core.Use(c, core.Settings{Locale: core.ZhCN})
if r := EmojiPicker(c, EmojiPickerOptions{}); r.Picked != "" {
picked = r.Picked
}
}, 400, 400)
if err := tt.Click("搜索表情"); err != nil {
t.Fatal(err)
}
tt.Type("小提琴")
if err := tt.Click("小提琴"); err != nil {
t.Fatal(err)
}
if picked != "🎻" {
t.Fatal("localized search did not choose violin")
}
}
func TestEmojiPickerInitialHistory(t *testing.T) {
recent := []string{"🌹", "🍷"}
tt := ui.NewTester(func(c *ui.Context) {
core.Use(c, core.Settings{})
EmojiPicker(c, EmojiPickerOptions{Recent: &recent})
}, 400, 400)
if got := mediaTextCount(tt, "🌹"); got != 3 {
t.Fatalf("initial history rose occurrences=%d, want 3", got)
}
}