Choices: review r1 fixes
This commit is contained in:
40 files changed
+774
-209
No files matched your search
@@ -0,0 +1,105 @@
|
||||
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)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user