106 lines
3.1 KiB
Go
106 lines
3.1 KiB
Go
package mujica
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/egoist/mygo/ui"
|
|
)
|
|
|
|
// choiceBetween builds control between two buttons, for Tab order checks.
|
|
func choiceBetween(control func(c *ui.Context)) *ui.Tester {
|
|
return ui.NewTester(func(c *ui.Context) {
|
|
Use(c, Settings{})
|
|
ui.Column(c).Padding(10).Gap(10).Width(300).Children(func() {
|
|
Button(c, "Before", ButtonOptions{})
|
|
control(c)
|
|
Button(c, "After", ButtonOptions{})
|
|
})
|
|
}, 400, 400)
|
|
}
|
|
|
|
// choiceTabSkips reports whether Tab from Before lands on After.
|
|
func choiceTabSkips(t *testing.T, tt *ui.Tester) bool {
|
|
t.Helper()
|
|
if err := tt.Click("Before"); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
tt.Key(0, ui.KeyTab)
|
|
return tt.Focused("After")
|
|
}
|
|
|
|
func TestToggleDisabled(t *testing.T) {
|
|
for _, disabled := range []bool{false, true} {
|
|
on := false
|
|
tt := choiceBetween(func(c *ui.Context) {
|
|
Toggle(c, &on, "Italic", ToggleOptions{Disabled: disabled})
|
|
})
|
|
_ = tt.Click("Italic")
|
|
if on == disabled {
|
|
t.Fatalf("disabled=%v: click left on=%v", disabled, on)
|
|
}
|
|
if choiceTabSkips(t, tt) != disabled {
|
|
t.Fatalf("disabled=%v: Tab skip wrong", disabled)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestSliderDisabled(t *testing.T) {
|
|
for _, disabled := range []bool{false, true} {
|
|
v := 30.0
|
|
tt := choiceBetween(func(c *ui.Context) {
|
|
Slider(c, &v, SliderOptions{Step: 1, Disabled: disabled, Label: "Volume"})
|
|
})
|
|
_ = tt.Click("Volume")
|
|
if (v != 30) == disabled {
|
|
t.Fatalf("disabled=%v: click left %v", disabled, v)
|
|
}
|
|
if choiceTabSkips(t, tt) != disabled {
|
|
t.Fatalf("disabled=%v: Tab skip wrong", disabled)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestRangeSliderDisabled(t *testing.T) {
|
|
for _, disabled := range []bool{false, true} {
|
|
low, high := 20.0, 40.0
|
|
tt := choiceBetween(func(c *ui.Context) {
|
|
RangeSlider(c, &low, &high, RangeSliderOptions{Step: 1, Disabled: disabled, Label: "Price"})
|
|
})
|
|
_ = tt.Click("Price")
|
|
if (high != 40) == disabled || low != 20 {
|
|
t.Fatalf("disabled=%v: click left %v..%v", disabled, low, high)
|
|
}
|
|
if choiceTabSkips(t, tt) != disabled {
|
|
t.Fatalf("disabled=%v: Tab skip wrong", disabled)
|
|
}
|
|
}
|
|
}
|
|
|
|
// Disabling a focused control in the frame a key arrives must block the key.
|
|
func TestChoiceDisabledWhileFocused(t *testing.T) {
|
|
disabled := false
|
|
on, pressed, group := false, false, []string{"left"}
|
|
items := []ToggleItem[string]{{Value: "left", Label: "Left"}, {Value: "right", Label: "Right"}}
|
|
for name, build := range map[string]func(c *ui.Context){
|
|
"switch": func(c *ui.Context) { Switch(c, &on, "Sync", SwitchOptions{Disabled: disabled}) },
|
|
"toggle": func(c *ui.Context) { Toggle(c, &pressed, "Bold", ToggleOptions{Disabled: disabled}) },
|
|
"group": func(c *ui.Context) {
|
|
items[1].Disabled = disabled
|
|
ToggleGroup(c, &group, items, ToggleGroupOptions{})
|
|
},
|
|
} {
|
|
disabled, on, pressed, group = false, false, false, []string{"left"}
|
|
tt := choiceBetween(build)
|
|
tt.Key(0, ui.KeyTab)
|
|
tt.Key(0, ui.KeyTab)
|
|
if name == "group" {
|
|
tt.Key(0, ui.KeyRight)
|
|
}
|
|
disabled = true
|
|
tt.Key(0, ui.KeySpace)
|
|
if on || pressed || group[0] != "left" {
|
|
t.Errorf("%s: Space changed a disabled control: %v %v %v", name, on, pressed, group)
|
|
}
|
|
}
|
|
}
|