Files
MujicaUI/base_disabled_test.go
T
ZacharyZhang-NY dbed3b603f Refactor: a disabled wrapper alone blocks choice bases
TestBasesBlockedByDisabledWrapper focuses CheckboxBase, RadioBase,
SwitchBase and ToggleBase, flips their wrapper to Disabled and presses
Space: none changes its value, and each does without the flip. So
choiceTarget goes from Switch, Toggle and MultiSelect, and PopupMenu
Check drops its copy; TestChoiceDisabledWhileFocused and
TestDropdownMenuCheckDisabledThisFrameKeepsValue still pass.

ComboboxBase is different: TestComboboxBaseIgnoresDisabledWrapper shows
a focused one still takes typing under a disabled wrapper, so Combobox
keeps a copy, now inline as its only user.
2026-10-05 13:47:09 -04:00

57 lines
1.7 KiB
Go

package mujica
import (
"testing"
"github.com/egoist/mygo/ui"
)
// TestBasesBlockedByDisabledWrapper flips a focused MyGo base's wrapper to Disabled in the frame Space arrives.
func TestBasesBlockedByDisabledWrapper(t *testing.T) {
for name, base := range map[string]func(c *ui.Context, on *bool) *ui.Element{
"CheckboxBase": func(c *ui.Context, on *bool) *ui.Element { return ui.CheckboxBase(c, on) },
"RadioBase": func(c *ui.Context, on *bool) *ui.Element { return ui.RadioBase(c, on, true) },
"SwitchBase": func(c *ui.Context, on *bool) *ui.Element { return ui.SwitchBase(c, on) },
"ToggleBase": func(c *ui.Context, on *bool) *ui.Element { return ui.ToggleBase(c, on) },
} {
for _, disable := range []bool{false, true} {
on, off := false, false
tt := ui.NewTester(func(c *ui.Context) {
ui.Row(c).Disabled(off).Children(func() {
base(c, &on).Label("Target").Size(40, 20)
})
}, 200, 100)
tt.Key(0, ui.KeyTab)
if !tt.Focused("Target") {
t.Fatalf("%s: not focused", name)
}
off = disable
tt.Key(0, ui.KeySpace)
tt.Frame()
if on == disable {
t.Errorf("%s: disabled=%v, Space left the value %v", name, disable, on)
}
}
}
}
// TestComboboxBaseIgnoresDisabledWrapper shows why Combobox hands its base a copy: a focused one still takes typing.
func TestComboboxBaseIgnoresDisabledWrapper(t *testing.T) {
q, off := "", false
tt := ui.NewTester(func(c *ui.Context) {
ui.Row(c).Disabled(off).Children(func() {
ui.ComboboxBase(c, &q).Input.Label("Target").Width(120)
})
}, 200, 100)
tt.Key(0, ui.KeyTab)
if !tt.Focused("Target") {
t.Fatal("not focused")
}
off = true
tt.Type("a")
tt.Frame()
if q != "a" {
t.Fatalf("typing left %q; the wrapper now blocks it and Combobox can drop its copy", q)
}
}