Split into category packages; module github.com/ZacharyZhang-NY/MujicaUI
This commit is contained in:
1822 files changed
+24568
-21314
No files matched your search
@@ -0,0 +1,142 @@
|
||||
package input
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/egoist/mygo/ui"
|
||||
|
||||
"github.com/ZacharyZhang-NY/MujicaUI/core"
|
||||
"github.com/ZacharyZhang-NY/MujicaUI/icons"
|
||||
)
|
||||
|
||||
func TestTextInputTypingAndSubmit(t *testing.T) {
|
||||
name, changes, submits := "", 0, 0
|
||||
tt := ui.NewTester(func(c *ui.Context) {
|
||||
core.Use(c, core.Settings{})
|
||||
r := TextInput(c, &name, TextInputOptions{Label: "Name", Placeholder: "Your name"})
|
||||
if r.Changed() {
|
||||
changes++
|
||||
}
|
||||
if r.Submitted() {
|
||||
submits++
|
||||
}
|
||||
}, 400, 200)
|
||||
if err := tt.Click("Name"); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
tt.Type("Ada")
|
||||
tt.Key(0, ui.KeyEnter)
|
||||
if name != "Ada" || changes == 0 || submits != 1 {
|
||||
t.Fatalf("name %q changes %d submits %d", name, changes, submits)
|
||||
}
|
||||
}
|
||||
|
||||
func TestTextInputUndoClipboardIME(t *testing.T) {
|
||||
s := ""
|
||||
tt := ui.NewTester(func(c *ui.Context) {
|
||||
core.Use(c, core.Settings{})
|
||||
TextInput(c, &s, TextInputOptions{Label: "Note"})
|
||||
}, 400, 200)
|
||||
_ = tt.Click("Note")
|
||||
tt.Compose("にほ", 2)
|
||||
if s != "" {
|
||||
t.Fatalf("composition leaked into value: %q", s)
|
||||
}
|
||||
tt.Type("日本")
|
||||
tt.Command("selectAll")
|
||||
tt.Command("copy")
|
||||
if tt.Clipboard() != "日本" {
|
||||
t.Fatalf("clipboard %q", tt.Clipboard())
|
||||
}
|
||||
tt.Type("x")
|
||||
tt.Command("undo")
|
||||
if s != "日本" {
|
||||
t.Fatalf("after undo %q", s)
|
||||
}
|
||||
}
|
||||
|
||||
func TestTextInputClear(t *testing.T) {
|
||||
s, changes := "draft", 0
|
||||
tt := ui.NewTester(func(c *ui.Context) {
|
||||
core.Use(c, core.Settings{})
|
||||
if TextInput(c, &s, TextInputOptions{Label: "Draft", Clearable: true}).Changed() {
|
||||
changes++
|
||||
}
|
||||
}, 400, 200)
|
||||
if err := tt.Click("Clear"); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if s != "" || changes != 1 {
|
||||
t.Fatalf("after clear %q, changes %d", s, changes)
|
||||
}
|
||||
if _, ok := tt.Find("Clear"); ok {
|
||||
t.Fatal("clear button stays on an empty field")
|
||||
}
|
||||
tt.Type("again")
|
||||
tt.Key(0, ui.KeyEscape)
|
||||
if s != "" || changes != 3 {
|
||||
t.Fatalf("after Escape %q, changes %d", s, changes)
|
||||
}
|
||||
}
|
||||
|
||||
func TestTextInputReadOnlyAndDisabled(t *testing.T) {
|
||||
ro, off := "fixed", "locked"
|
||||
tt := ui.NewTester(func(c *ui.Context) {
|
||||
core.Use(c, core.Settings{})
|
||||
ui.Column(c).Gap(8).Children(func() {
|
||||
TextInput(c, &ro, TextInputOptions{Label: "RO", ReadOnly: true, Clearable: true})
|
||||
TextInput(c, &off, TextInputOptions{Label: "Off", Disabled: true})
|
||||
})
|
||||
}, 400, 200)
|
||||
_ = tt.Click("RO")
|
||||
tt.Command("selectAll")
|
||||
tt.Command("copy")
|
||||
tt.Type("zz")
|
||||
tt.Key(0, ui.KeyBackspace)
|
||||
if ro != "fixed" || tt.Clipboard() != "fixed" {
|
||||
t.Fatalf("read-only value %q clipboard %q", ro, tt.Clipboard())
|
||||
}
|
||||
if _, ok := tt.Find("Clear"); ok {
|
||||
t.Fatal("read-only field offers clear")
|
||||
}
|
||||
_ = tt.Click("Off")
|
||||
tt.Type("zz")
|
||||
if off != "locked" || tt.Focused("Off") {
|
||||
t.Fatalf("disabled value %q focused %v", off, tt.Focused("Off"))
|
||||
}
|
||||
}
|
||||
|
||||
func TestTextInputSlotsAndError(t *testing.T) {
|
||||
s := "x"
|
||||
tt := ui.NewTester(func(c *ui.Context) {
|
||||
core.Use(c, core.Settings{})
|
||||
TextInput(c, &s, TextInputOptions{
|
||||
Label: "Price",
|
||||
Leading: func() { ui.Text(c, "¥") },
|
||||
Trailing: func() { ui.Text(c, "CNY") },
|
||||
Error: "Not a price",
|
||||
})
|
||||
}, 400, 200)
|
||||
for _, want := range []string{"¥", "CNY", "Not a price"} {
|
||||
if !tt.HasText(want) {
|
||||
t.Fatalf("missing %q in %q", want, tt.Texts())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestTextInputSnapshot(t *testing.T) {
|
||||
view := func(c *ui.Context) {
|
||||
a, b, e, ro, dis := "", "Elisabeth", "1789-13-01", "Read only", "Disabled"
|
||||
ui.Column(c).Padding(24).Gap(12).Width(360).Children(func() {
|
||||
TextInput(c, &a, TextInputOptions{Placeholder: "Placeholder", Label: "A"})
|
||||
TextInput(c, &b, TextInputOptions{Label: "B", Clearable: true, Leading: func() {
|
||||
ui.Icon(c, icons.Must("user")).Size(16, 16).TextColor(core.Tokens(c).TextMuted)
|
||||
}})
|
||||
TextInput(c, &e, TextInputOptions{Label: "E", Error: "No such date"})
|
||||
TextInput(c, &ro, TextInputOptions{Label: "R", ReadOnly: true})
|
||||
TextInput(c, &dis, TextInputOptions{Label: "D", Disabled: true})
|
||||
})
|
||||
}
|
||||
snapshot(t, "text_input", 420, 320, view)
|
||||
buttonDensitySnapshots(t, "text_input", 420, 360, view)
|
||||
}
|
||||
Reference in new issue
Block a user