308 lines
8.8 KiB
Go
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())
|
|
}
|
|
}
|