star/bed/layout/layout_test.go
2025-04-26 19:33:14 +08:00

308 lines
8.8 KiB
Go

package layout
import (
"reflect"
"testing"
)
func TestLayout(t *testing.T) {
layout := NewLayout(0)
layout = layout.SplitTop(1)
layout = layout.SplitLeft(2)
layout = layout.SplitBottom(3)
layout = layout.SplitRight(4)
var expected Layout
expected = Horizontal{
Top: Vertical{
Left: Horizontal{
Top: Window{Index: 2, Active: false},
Bottom: Vertical{
Left: Window{Index: 3, Active: false},
Right: Window{Index: 4, Active: true},
},
},
Right: Window{Index: 1, Active: false},
},
Bottom: Window{Index: 0, Active: false},
}
if !reflect.DeepEqual(layout, expected) {
t.Errorf("layout should be %#v but got %#v", expected, layout)
}
w, h := layout.Count()
if w != 3 {
t.Errorf("layout width be %d but got %d", 3, w)
}
if h != 3 {
t.Errorf("layout height be %d but got %d", 3, h)
}
layout = layout.Resize(0, 0, 15, 15)
expected = Horizontal{
Top: Vertical{
Left: Horizontal{
Top: Window{Index: 2, Active: false, left: 0, top: 0, width: 10, height: 5},
Bottom: Vertical{
Left: Window{Index: 3, Active: false, left: 0, top: 5, width: 5, height: 5},
Right: Window{Index: 4, Active: true, left: 6, top: 5, width: 4, height: 5},
left: 0,
top: 5,
width: 10,
height: 5,
},
left: 0,
top: 0,
width: 10,
height: 10,
},
Right: Window{Index: 1, Active: false, left: 11, top: 0, width: 4, height: 10},
left: 0,
top: 0,
width: 15,
height: 10,
},
Bottom: Window{Index: 0, Active: false, left: 0, top: 10, width: 15, height: 5},
left: 0,
top: 0,
width: 15,
height: 15,
}
if !reflect.DeepEqual(layout, expected) {
t.Errorf("layout should be %#v but got %#v", expected, layout)
}
expectedWindow := Window{Index: 1, Active: false, left: 11, top: 0, width: 4, height: 10}
got := layout.Lookup(func(l Window) bool { return l.Index == 1 })
if !reflect.DeepEqual(got, expectedWindow) {
t.Errorf("Lookup(Index == 1) should be %+v but got %+v", expectedWindow, got)
}
if got.LeftMargin() != 11 {
t.Errorf("LeftMargin() should be %d but got %d", 11, got.LeftMargin())
}
if got.TopMargin() != 0 {
t.Errorf("TopMargin() should be %d but got %d", 0, got.TopMargin())
}
if got.Width() != 4 {
t.Errorf("Width() should be %d but got %d", 4, got.Width())
}
if got.Height() != 10 {
t.Errorf("Height() should be %d but got %d", 10, got.Height())
}
expectedWindow = Window{Index: 3, Active: false, left: 0, top: 5, width: 5, height: 5}
got = layout.Lookup(func(l Window) bool { return l.Index == 3 })
if !reflect.DeepEqual(got, expectedWindow) {
t.Errorf("Lookup(Index == 3) should be %+v but got %+v", expectedWindow, got)
}
if got.LeftMargin() != 0 {
t.Errorf("LeftMargin() should be %d but got %d", 0, got.LeftMargin())
}
if got.TopMargin() != 5 {
t.Errorf("TopMargin() should be %d but got %d", 5, got.TopMargin())
}
if got.Width() != 5 {
t.Errorf("Width() should be %d but got %d", 5, got.Width())
}
if got.Height() != 5 {
t.Errorf("Height() should be %d but got %d", 5, got.Height())
}
expectedWindow = Window{Index: -1}
got = layout.Lookup(func(l Window) bool { return l.Index == 5 })
if !reflect.DeepEqual(got, expectedWindow) {
t.Errorf("Lookup(Index == 5) should be %+v but got %+v", expectedWindow, got)
}
expectedWindow = Window{Index: 4, Active: true, left: 6, top: 5, width: 4, height: 5}
got = layout.ActiveWindow()
if !reflect.DeepEqual(got, expectedWindow) {
t.Errorf("ActiveWindow() should be %+v but got %+v", expectedWindow, got)
}
expectedMap := map[int]Window{
0: {Index: 0, Active: false, left: 0, top: 10, width: 15, height: 5},
1: {Index: 1, Active: false, left: 11, top: 0, width: 4, height: 10},
2: {Index: 2, Active: false, left: 0, top: 0, width: 10, height: 5},
3: {Index: 3, Active: false, left: 0, top: 5, width: 5, height: 5},
4: {Index: 4, Active: true, left: 6, top: 5, width: 4, height: 5},
}
if !reflect.DeepEqual(layout.Collect(), expectedMap) {
t.Errorf("Collect should be %+v but got %+v", expectedMap, layout.Collect())
}
layout = layout.Close().Resize(0, 0, 15, 15)
expected = Horizontal{
Top: Vertical{
Left: Horizontal{
Top: Window{Index: 2, Active: false, left: 0, top: 0, width: 7, height: 5},
Bottom: Window{Index: 3, Active: true, left: 0, top: 5, width: 7, height: 5},
left: 0,
top: 0,
width: 7,
height: 10,
},
Right: Window{Index: 1, Active: false, left: 8, top: 0, width: 7, height: 10},
left: 0,
top: 0,
width: 15,
height: 10,
},
Bottom: Window{Index: 0, Active: false, left: 0, top: 10, width: 15, height: 5},
left: 0,
top: 0,
width: 15,
height: 15,
}
if !reflect.DeepEqual(layout, expected) {
t.Errorf("layout should be %#v but got %#v", expected, layout)
}
if layout.LeftMargin() != 0 {
t.Errorf("LeftMargin() should be %d but layout %d", 0, layout.LeftMargin())
}
if layout.TopMargin() != 0 {
t.Errorf("TopMargin() should be %d but layout %d", 0, layout.TopMargin())
}
if layout.Width() != 15 {
t.Errorf("Width() should be %d but layout %d", 15, layout.Width())
}
if layout.Height() != 15 {
t.Errorf("Height() should be %d but layout %d", 15, layout.Height())
}
expectedMap = map[int]Window{
0: {Index: 0, Active: false, left: 0, top: 10, width: 15, height: 5},
1: {Index: 1, Active: false, left: 8, top: 0, width: 7, height: 10},
2: {Index: 2, Active: false, left: 0, top: 0, width: 7, height: 5},
3: {Index: 3, Active: true, left: 0, top: 5, width: 7, height: 5},
}
if !reflect.DeepEqual(layout.Collect(), expectedMap) {
t.Errorf("Collect should be %+v but got %+v", expectedMap, layout.Collect())
}
w, h = layout.Count()
if w != 2 {
t.Errorf("layout width be %d but got %d", 3, w)
}
if h != 3 {
t.Errorf("layout height be %d but got %d", 3, h)
}
layout = layout.Replace(5)
expected = Horizontal{
Top: Vertical{
Left: Horizontal{
Top: Window{Index: 2, Active: false, left: 0, top: 0, width: 7, height: 5},
Bottom: Window{Index: 5, Active: true, left: 0, top: 5, width: 7, height: 5},
left: 0,
top: 0,
width: 7,
height: 10,
},
Right: Window{Index: 1, Active: false, left: 8, top: 0, width: 7, height: 10},
left: 0,
top: 0,
width: 15,
height: 10,
},
Bottom: Window{Index: 0, Active: false, left: 0, top: 10, width: 15, height: 5},
left: 0,
top: 0,
width: 15,
height: 15,
}
if !reflect.DeepEqual(layout, expected) {
t.Errorf("layout should be %#v but got %#v", expected, layout)
}
layout = layout.Activate(1)
expected = Horizontal{
Top: Vertical{
Left: Horizontal{
Top: Window{Index: 2, Active: false, left: 0, top: 0, width: 7, height: 5},
Bottom: Window{Index: 5, Active: false, left: 0, top: 5, width: 7, height: 5},
left: 0,
top: 0,
width: 7,
height: 10,
},
Right: Window{Index: 1, Active: true, left: 8, top: 0, width: 7, height: 10},
left: 0,
top: 0,
width: 15,
height: 10,
},
Bottom: Window{Index: 0, Active: false, left: 0, top: 10, width: 15, height: 5},
left: 0,
top: 0,
width: 15,
height: 15,
}
if !reflect.DeepEqual(layout, expected) {
t.Errorf("layout should be %#v but got %#v", expected, layout)
}
layout = Vertical{
Left: Window{Index: 6, Active: false},
Right: layout,
}.SplitLeft(7).SplitTop(8).Resize(0, 0, 15, 10)
expected = Vertical{
Left: Window{Index: 6, Active: false, left: 0, top: 0, width: 3, height: 10},
Right: Horizontal{
Top: Vertical{
Left: Horizontal{
Top: Window{Index: 2, Active: false, left: 4, top: 0, width: 3, height: 3},
Bottom: Window{Index: 5, Active: false, left: 4, top: 3, width: 3, height: 3},
left: 4, top: 0, width: 3, height: 6,
},
Right: Vertical{
Left: Horizontal{
Top: Window{Index: 8, Active: true, left: 8, top: 0, width: 3, height: 3},
Bottom: Window{Index: 7, Active: false, left: 8, top: 3, width: 3, height: 3},
left: 8, top: 0, width: 3, height: 6,
},
Right: Window{Index: 1, Active: false, left: 12, top: 0, width: 3, height: 6},
left: 8, top: 0, width: 7, height: 6,
},
left: 4, top: 0, width: 11, height: 6,
},
Bottom: Window{Index: 0, Active: false, left: 4, top: 6, width: 11, height: 4},
left: 4, top: 0, width: 11, height: 10,
},
left: 0, top: 0, width: 15, height: 10,
}
if !reflect.DeepEqual(layout, expected) {
t.Errorf("layout should be %#v but got %#v", expected, layout)
}
if layout.LeftMargin() != 0 {
t.Errorf("LeftMargin() should be %d but layout %d", 0, layout.LeftMargin())
}
if layout.TopMargin() != 0 {
t.Errorf("TopMargin() should be %d but layout %d", 0, layout.TopMargin())
}
if layout.Width() != 15 {
t.Errorf("Width() should be %d but layout %d", 15, layout.Width())
}
if layout.Height() != 10 {
t.Errorf("Height() should be %d but layout %d", 10, layout.Height())
}
}