package mujica import ( "slices" "testing" "github.com/egoist/mygo/ui" ) func TestEmojiPickerPickSearchToneRecent(t *testing.T) { var recent []string tone := 0 var picked []string tt := ui.NewTester(func(c *ui.Context) { Use(c, 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) { Use(c, 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) { Use(c, 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) { Use(c, 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) { Use(c, Settings{Locale: 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) { Use(c, Settings{}) EmojiPicker(c, EmojiPickerOptions{Recent: &recent}) }, 400, 400) if got := mediaTextCount(tt, "๐ŸŒน"); got != 3 { t.Fatalf("initial history rose occurrences=%d, want 3", got) } }