103 lines
2.8 KiB
Go
103 lines
2.8 KiB
Go
package overlay
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/egoist/mygo/ui"
|
|
|
|
"github.com/ZacharyZhang-NY/MujicaUI/core"
|
|
"github.com/ZacharyZhang-NY/MujicaUI/input"
|
|
)
|
|
|
|
func splitButtonTester(dis *bool, runs *int, chosen *string) *ui.Tester {
|
|
return ui.NewTester(func(c *ui.Context) {
|
|
core.Use(c, core.Settings{})
|
|
ui.Row(c).Padding(20).Children(func() {
|
|
r := SplitButton(c, "Save", SplitButtonOptions{Disabled: *dis}, func(m *PopupMenu) {
|
|
for _, s := range []string{"Save as…", "Save all"} {
|
|
if m.Item(s, PopupMenuItemOptions{}) {
|
|
*chosen = s
|
|
}
|
|
}
|
|
})
|
|
if r.Changed() {
|
|
*runs++
|
|
}
|
|
})
|
|
}, 500, 300)
|
|
}
|
|
|
|
func TestSplitButtonMainAndMenu(t *testing.T) {
|
|
dis, runs, chosen := false, 0, ""
|
|
tt := splitButtonTester(&dis, &runs, &chosen)
|
|
if err := tt.Click("Save"); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if runs != 1 || tt.HasText("Save all") {
|
|
t.Fatalf("main click: runs %d, menu open %v", runs, tt.HasText("Save all"))
|
|
}
|
|
if err := tt.Click("More options"); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := tt.Click("Save all"); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if chosen != "Save all" || runs != 1 || tt.HasText("Save as…") {
|
|
t.Fatalf("menu choice %q runs %d", chosen, runs)
|
|
}
|
|
}
|
|
|
|
func TestSplitButtonKeyboardHalves(t *testing.T) {
|
|
dis, runs, chosen := false, 0, ""
|
|
tt := splitButtonTester(&dis, &runs, &chosen)
|
|
tt.Key(0, ui.KeyTab)
|
|
if !tt.Focused("Save") {
|
|
t.Fatal("first Tab misses the main half")
|
|
}
|
|
tt.Key(0, ui.KeyEnter)
|
|
tt.Key(0, ui.KeyTab)
|
|
if !tt.Focused("More options") {
|
|
t.Fatal("second Tab misses the menu half")
|
|
}
|
|
tt.Key(0, ui.KeyDown)
|
|
if runs != 1 || !tt.HasText("Save as…") {
|
|
t.Fatalf("runs %d, menu %v", runs, tt.HasText("Save as…"))
|
|
}
|
|
tt.Key(0, ui.KeyEnter)
|
|
if chosen != "Save as…" {
|
|
t.Fatalf("Enter chose %q", chosen)
|
|
}
|
|
}
|
|
|
|
func TestSplitButtonDisabled(t *testing.T) {
|
|
dis, runs, chosen := true, 0, ""
|
|
tt := splitButtonTester(&dis, &runs, &chosen)
|
|
_ = tt.Click("Save")
|
|
_ = tt.Click("More options")
|
|
tt.Key(0, ui.KeyTab)
|
|
tt.Key(0, ui.KeyEnter)
|
|
if runs != 0 || tt.HasText("Save all") {
|
|
t.Fatalf("disabled: runs %d menu %v", runs, tt.HasText("Save all"))
|
|
}
|
|
defer func() {
|
|
if recover() == nil {
|
|
t.Fatal("Danger variant accepted")
|
|
}
|
|
}()
|
|
ui.NewTester(func(c *ui.Context) {
|
|
core.Use(c, core.Settings{})
|
|
SplitButton(c, "x", SplitButtonOptions{Variant: input.Danger}, func(*PopupMenu) {})
|
|
}, 200, 100)
|
|
}
|
|
|
|
func TestSplitButtonSnapshot(t *testing.T) {
|
|
snapshot(t, "split_button", 460, 80, func(c *ui.Context) {
|
|
ui.Row(c).Padding(16).Gap(12).Children(func() {
|
|
menu := func(m *PopupMenu) { m.Item("Other", PopupMenuItemOptions{}) }
|
|
SplitButton(c, "Publish", SplitButtonOptions{}, menu)
|
|
SplitButton(c, "Export", SplitButtonOptions{Variant: input.Secondary}, menu)
|
|
SplitButton(c, "Merge", SplitButtonOptions{Disabled: true}, menu)
|
|
})
|
|
})
|
|
}
|