Files
MujicaUI/project/subtask_list_test.go
T

110 lines
2.9 KiB
Go

package project
import (
"fmt"
"testing"
"github.com/egoist/mygo/ui"
"github.com/ZacharyZhang-NY/MujicaUI/core"
)
func subtaskSample() []Subtask {
return []Subtask{{ID: "a", Title: "Sketch", Done: true}, {ID: "b", Title: "Score"}, {ID: "c", Title: "Rehearse"}}
}
func subtaskTester(subs *[]Subtask, opts *SubtaskListOptions, n *int) *ui.Tester {
return ui.NewTester(func(c *ui.Context) {
core.Use(c, core.Settings{})
ui.Column(c).Padding(16).Children(func() {
if SubtaskList(c, subs, *opts).Changed() {
*n++
}
})
}, 480, 480)
}
func subtaskTitles(s []Subtask) string {
out := ""
for _, x := range s {
out += x.ID
}
return out
}
func TestSubtaskListProgressCheckAdd(t *testing.T) {
subs, n := subtaskSample(), 0
tt := subtaskTester(&subs, &SubtaskListOptions{}, &n)
if !tt.HasText("1 of 3 done") {
t.Fatalf("progress %v", tt.Texts())
}
_ = tt.Click("Score")
if !subs[1].Done || !tt.HasText("2 of 3 done") {
t.Fatal("check")
}
_ = tt.Click("Add a subtask")
tt.Type("Bow")
tt.Key(0, ui.KeyEnter)
if len(subs) != 4 || subs[3].Title != "Bow" || subs[3].ID != "sub-4" || !tt.HasText("2 of 4 done") {
t.Fatalf("add %+v", subs)
}
_ = tt.Click("Remove Sketch")
if subtaskTitles(subs) != "bcsub-4" || n != 3 {
t.Fatalf("remove %v (%d)", subtaskTitles(subs), n)
}
}
func TestSubtaskListReorder(t *testing.T) {
subs, n := subtaskSample(), 0
tt := subtaskTester(&subs, &SubtaskListOptions{}, &n)
_ = tt.Click("Rehearse")
tt.Key(ui.Alt, ui.KeyUp)
if subtaskTitles(subs) != "acb" {
t.Fatalf("Alt+Up %v", subtaskTitles(subs))
}
g, _ := tt.Find("Drag Sketch")
target, _ := tt.Find("Drag Score")
calDrag(tt, g.X+g.W/2, g.Y+g.H/2, target.X+40, target.Y+target.H/2)
if subtaskTitles(subs) != "cba" {
t.Fatalf("drag %v", subtaskTitles(subs))
}
}
func TestSubtaskListDisabledAndInvalid(t *testing.T) {
subs, n := subtaskSample(), 0
tt := subtaskTester(&subs, &SubtaskListOptions{Disabled: true}, &n)
_ = tt.Click("Score")
_ = tt.Click("Remove Sketch")
g, _ := tt.Find("Drag Sketch")
calDrag(tt, g.X+g.W/2, g.Y+g.H/2, g.X+g.W/2, g.Y+120)
if n != 0 || subtaskTitles(subs) != "abc" || subs[1].Done {
t.Fatal("disabled list changed")
}
defer func() {
if recover() == nil {
t.Fatal("expected panic for repeated IDs")
}
}()
bad := []Subtask{{ID: "x"}, {ID: "x"}}
subtaskTester(&bad, &SubtaskListOptions{}, &n)
}
func TestSubtaskListSnapshot(t *testing.T) {
subs := subtaskSample()
snapshot(t, "subtask_list", 440, 240, func(c *ui.Context) {
ui.Column(c).Padding(16).Children(func() { SubtaskList(c, &subs, SubtaskListOptions{}) })
})
}
func TestSubtaskListLargeData(t *testing.T) {
subs := make([]Subtask, 100000)
for i := range subs {
subs[i] = Subtask{ID: fmt.Sprint(i), Title: "Step"}
}
n := 0
tt := subtaskTester(&subs, &SubtaskListOptions{}, &n)
if built := len(tt.Texts()); built > 200 {
t.Fatalf("built %d labels", built)
}
}