118 lines
3.0 KiB
Go
118 lines
3.0 KiB
Go
package layout
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/egoist/mygo/ui"
|
|
|
|
"git.zacharyzhang.com/ZacharyZhang-NY/MujicaUI/core"
|
|
)
|
|
|
|
func TestStackVerticalGap(t *testing.T) {
|
|
var a, b ui.Rect
|
|
ui.NewTester(func(c *ui.Context) {
|
|
core.Use(c, core.Settings{})
|
|
Stack(c, StackOptions{}, func() {
|
|
a = ui.Box(c).Height(20).Bounds()
|
|
b = ui.Box(c).Height(20).Bounds()
|
|
})
|
|
}, 300, 300).Frame()
|
|
if b.Y-(a.Y+a.H) != 8 {
|
|
t.Fatalf("gap %v, want 8", b.Y-(a.Y+a.H))
|
|
}
|
|
if a.W != 300 {
|
|
t.Fatalf("vertical stack did not stretch: width %v", a.W)
|
|
}
|
|
}
|
|
|
|
func TestStackHiddenItemTakesNoGap(t *testing.T) {
|
|
for _, hide := range []bool{false, true} {
|
|
var a, last ui.Rect
|
|
ui.NewTester(func(c *ui.Context) {
|
|
core.Use(c, core.Settings{})
|
|
Stack(c, StackOptions{Horizontal: true, Gap: SpaceL}, func() {
|
|
a = ui.Box(c).Size(30, 10).Bounds()
|
|
if !hide {
|
|
ui.Box(c).Size(30, 10)
|
|
}
|
|
last = ui.Box(c).Size(30, 10).Bounds()
|
|
})
|
|
}, 300, 300).Frame()
|
|
want := a.X + 30 + 16
|
|
if !hide {
|
|
want += 30 + 16
|
|
}
|
|
if last.X != want {
|
|
t.Errorf("hidden=%v: last at %v, want %v", hide, last.X, want)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestStackAlignEnd(t *testing.T) {
|
|
var r ui.Rect
|
|
ui.NewTester(func(c *ui.Context) {
|
|
core.Use(c, core.Settings{})
|
|
ui.Column(c).Width(200).Children(func() {
|
|
Stack(c, StackOptions{Align: StackAlignEnd}, func() {
|
|
r = ui.Box(c).Size(50, 10).Bounds()
|
|
})
|
|
})
|
|
}, 300, 300).Frame()
|
|
if r.X != 150 {
|
|
t.Fatalf("end-aligned child at %v, want 150", r.X)
|
|
}
|
|
}
|
|
|
|
func TestStackJustifyAndWrap(t *testing.T) {
|
|
var first, third ui.Rect
|
|
ui.NewTester(func(c *ui.Context) {
|
|
core.Use(c, core.Settings{})
|
|
ui.Column(c).Width(250).Children(func() {
|
|
Stack(c, StackOptions{Horizontal: true, Wrap: true, Gap: SpaceNone, Justify: ui.End}, func() {
|
|
first = ui.Box(c).Size(100, 20).Bounds()
|
|
ui.Box(c).Size(100, 20)
|
|
third = ui.Box(c).Size(100, 20).Bounds()
|
|
})
|
|
})
|
|
}, 300, 300).Frame()
|
|
if third.Y != first.Y+20 {
|
|
t.Fatalf("third at y=%v, want the next line at %v", third.Y, first.Y+20)
|
|
}
|
|
if first.X != 50 || third.X != 150 {
|
|
t.Fatalf("end-justified lines start at %v and %v, want 50 and 150", first.X, third.X)
|
|
}
|
|
}
|
|
|
|
func TestStackWrapNeedsHorizontal(t *testing.T) {
|
|
defer func() {
|
|
if recover() == nil {
|
|
t.Fatal("vertical Wrap did not panic")
|
|
}
|
|
}()
|
|
ui.NewTester(func(c *ui.Context) {
|
|
core.Use(c, core.Settings{})
|
|
Stack(c, StackOptions{Wrap: true}, func() {})
|
|
}, 100, 100)
|
|
}
|
|
|
|
func TestStackSnapshot(t *testing.T) {
|
|
snapshot(t, "stack", 420, 150, func(c *ui.Context) {
|
|
k := core.Tokens(c)
|
|
chip := func(s string) {
|
|
ui.Box(c).Padding(6, 12).Background(k.Surface).Border(1, k.Border).Radius(2).Children(func() { ui.Text(c, s) })
|
|
}
|
|
ui.Column(c).Padding(16).Gap(16).Children(func() {
|
|
Stack(c, StackOptions{Horizontal: true}, func() {
|
|
for _, s := range []string{"Overture", "Aria", "Recitative"} {
|
|
chip(s)
|
|
}
|
|
})
|
|
Stack(c, StackOptions{Horizontal: true, Justify: ui.SpaceBetween}, func() {
|
|
chip("Start")
|
|
chip("Between")
|
|
chip("End")
|
|
})
|
|
})
|
|
})
|
|
}
|