mirror of
https://github.com/jesseduffield/lazygit.git
synced 2025-03-03 15:02:52 +02:00
add specs to boxlayout package
This commit is contained in:
parent
1e12a60b34
commit
f02ccca0e0
@ -47,24 +47,6 @@ type Box struct {
|
|||||||
Weight int
|
Weight int
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *Box) isStatic() bool {
|
|
||||||
return b.Size > 0
|
|
||||||
}
|
|
||||||
|
|
||||||
func (b *Box) getDirection(width int, height int) int {
|
|
||||||
if b.ConditionalDirection != nil {
|
|
||||||
return b.ConditionalDirection(width, height)
|
|
||||||
}
|
|
||||||
return b.Direction
|
|
||||||
}
|
|
||||||
|
|
||||||
func (b *Box) getChildren(width int, height int) []*Box {
|
|
||||||
if b.ConditionalChildren != nil {
|
|
||||||
return b.ConditionalChildren(width, height)
|
|
||||||
}
|
|
||||||
return b.Children
|
|
||||||
}
|
|
||||||
|
|
||||||
func ArrangeViews(root *Box, x0, y0, width, height int) map[string]Dimensions {
|
func ArrangeViews(root *Box, x0, y0, width, height int) map[string]Dimensions {
|
||||||
children := root.getChildren(width, height)
|
children := root.getChildren(width, height)
|
||||||
if len(children) == 0 {
|
if len(children) == 0 {
|
||||||
@ -134,6 +116,24 @@ func ArrangeViews(root *Box, x0, y0, width, height int) map[string]Dimensions {
|
|||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (b *Box) isStatic() bool {
|
||||||
|
return b.Size > 0
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *Box) getDirection(width int, height int) int {
|
||||||
|
if b.ConditionalDirection != nil {
|
||||||
|
return b.ConditionalDirection(width, height)
|
||||||
|
}
|
||||||
|
return b.Direction
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *Box) getChildren(width int, height int) []*Box {
|
||||||
|
if b.ConditionalChildren != nil {
|
||||||
|
return b.ConditionalChildren(width, height)
|
||||||
|
}
|
||||||
|
return b.Children
|
||||||
|
}
|
||||||
|
|
||||||
func mergeDimensionMaps(a map[string]Dimensions, b map[string]Dimensions) map[string]Dimensions {
|
func mergeDimensionMaps(a map[string]Dimensions, b map[string]Dimensions) map[string]Dimensions {
|
||||||
result := map[string]Dimensions{}
|
result := map[string]Dimensions{}
|
||||||
for _, dimensionMap := range []map[string]Dimensions{a, b} {
|
for _, dimensionMap := range []map[string]Dimensions{a, b} {
|
||||||
|
189
pkg/gui/boxlayout/boxlayout_test.go
Normal file
189
pkg/gui/boxlayout/boxlayout_test.go
Normal file
@ -0,0 +1,189 @@
|
|||||||
|
package boxlayout
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestArrangeViews(t *testing.T) {
|
||||||
|
type scenario struct {
|
||||||
|
testName string
|
||||||
|
root *Box
|
||||||
|
x0 int
|
||||||
|
y0 int
|
||||||
|
width int
|
||||||
|
height int
|
||||||
|
test func(result map[string]Dimensions)
|
||||||
|
}
|
||||||
|
|
||||||
|
scenarios := []scenario{
|
||||||
|
{
|
||||||
|
"Empty box",
|
||||||
|
&Box{},
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
10,
|
||||||
|
10,
|
||||||
|
func(result map[string]Dimensions) {
|
||||||
|
assert.EqualValues(t, result, map[string]Dimensions{})
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Box with static and dynamic panel",
|
||||||
|
&Box{Children: []*Box{{Size: 1, ViewName: "static"}, {Weight: 1, ViewName: "dynamic"}}},
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
10,
|
||||||
|
10,
|
||||||
|
func(result map[string]Dimensions) {
|
||||||
|
assert.EqualValues(
|
||||||
|
t,
|
||||||
|
result,
|
||||||
|
map[string]Dimensions{
|
||||||
|
"dynamic": {X0: 0, X1: 9, Y0: 1, Y1: 9},
|
||||||
|
"static": {X0: 0, X1: 9, Y0: 0, Y1: 0},
|
||||||
|
},
|
||||||
|
)
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Box with static and two dynamic panels",
|
||||||
|
&Box{Children: []*Box{{Size: 1, ViewName: "static"}, {Weight: 1, ViewName: "dynamic1"}, {Weight: 2, ViewName: "dynamic2"}}},
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
10,
|
||||||
|
10,
|
||||||
|
func(result map[string]Dimensions) {
|
||||||
|
assert.EqualValues(
|
||||||
|
t,
|
||||||
|
result,
|
||||||
|
map[string]Dimensions{
|
||||||
|
"static": {X0: 0, X1: 9, Y0: 0, Y1: 0},
|
||||||
|
"dynamic1": {X0: 0, X1: 9, Y0: 1, Y1: 3},
|
||||||
|
"dynamic2": {X0: 0, X1: 9, Y0: 4, Y1: 9},
|
||||||
|
},
|
||||||
|
)
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Box with COLUMN direction",
|
||||||
|
&Box{Direction: COLUMN, Children: []*Box{{Size: 1, ViewName: "static"}, {Weight: 1, ViewName: "dynamic1"}, {Weight: 2, ViewName: "dynamic2"}}},
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
10,
|
||||||
|
10,
|
||||||
|
func(result map[string]Dimensions) {
|
||||||
|
assert.EqualValues(
|
||||||
|
t,
|
||||||
|
result,
|
||||||
|
map[string]Dimensions{
|
||||||
|
"static": {X0: 0, X1: 0, Y0: 0, Y1: 9},
|
||||||
|
"dynamic1": {X0: 1, X1: 3, Y0: 0, Y1: 9},
|
||||||
|
"dynamic2": {X0: 4, X1: 9, Y0: 0, Y1: 9},
|
||||||
|
},
|
||||||
|
)
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Box with COLUMN direction only on wide boxes with narrow box",
|
||||||
|
&Box{ConditionalDirection: func(width int, height int) int {
|
||||||
|
if width > 4 {
|
||||||
|
return COLUMN
|
||||||
|
} else {
|
||||||
|
return ROW
|
||||||
|
}
|
||||||
|
}, Children: []*Box{{Weight: 1, ViewName: "dynamic1"}, {Weight: 1, ViewName: "dynamic2"}}},
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
4,
|
||||||
|
4,
|
||||||
|
func(result map[string]Dimensions) {
|
||||||
|
assert.EqualValues(
|
||||||
|
t,
|
||||||
|
result,
|
||||||
|
map[string]Dimensions{
|
||||||
|
"dynamic1": {X0: 0, X1: 3, Y0: 0, Y1: 1},
|
||||||
|
"dynamic2": {X0: 0, X1: 3, Y0: 2, Y1: 3},
|
||||||
|
},
|
||||||
|
)
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Box with COLUMN direction only on wide boxes with wide box",
|
||||||
|
&Box{ConditionalDirection: func(width int, height int) int {
|
||||||
|
if width > 4 {
|
||||||
|
return COLUMN
|
||||||
|
} else {
|
||||||
|
return ROW
|
||||||
|
}
|
||||||
|
}, Children: []*Box{{Weight: 1, ViewName: "dynamic1"}, {Weight: 1, ViewName: "dynamic2"}}},
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
5,
|
||||||
|
5,
|
||||||
|
func(result map[string]Dimensions) {
|
||||||
|
assert.EqualValues(
|
||||||
|
t,
|
||||||
|
result,
|
||||||
|
map[string]Dimensions{
|
||||||
|
"dynamic1": {X0: 0, X1: 2, Y0: 0, Y1: 4},
|
||||||
|
"dynamic2": {X0: 3, X1: 4, Y0: 0, Y1: 4},
|
||||||
|
},
|
||||||
|
)
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Box with conditional children where box is wide",
|
||||||
|
&Box{ConditionalChildren: func(width int, height int) []*Box {
|
||||||
|
if width > 4 {
|
||||||
|
return []*Box{{ViewName: "wide", Weight: 1}}
|
||||||
|
} else {
|
||||||
|
return []*Box{{ViewName: "narrow", Weight: 1}}
|
||||||
|
}
|
||||||
|
}},
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
5,
|
||||||
|
5,
|
||||||
|
func(result map[string]Dimensions) {
|
||||||
|
assert.EqualValues(
|
||||||
|
t,
|
||||||
|
result,
|
||||||
|
map[string]Dimensions{
|
||||||
|
"wide": {X0: 0, X1: 4, Y0: 0, Y1: 4},
|
||||||
|
},
|
||||||
|
)
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Box with conditional children where box is narrow",
|
||||||
|
&Box{ConditionalChildren: func(width int, height int) []*Box {
|
||||||
|
if width > 4 {
|
||||||
|
return []*Box{{ViewName: "wide", Weight: 1}}
|
||||||
|
} else {
|
||||||
|
return []*Box{{ViewName: "narrow", Weight: 1}}
|
||||||
|
}
|
||||||
|
}},
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
4,
|
||||||
|
4,
|
||||||
|
func(result map[string]Dimensions) {
|
||||||
|
assert.EqualValues(
|
||||||
|
t,
|
||||||
|
result,
|
||||||
|
map[string]Dimensions{
|
||||||
|
"narrow": {X0: 0, X1: 3, Y0: 0, Y1: 3},
|
||||||
|
},
|
||||||
|
)
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, s := range scenarios {
|
||||||
|
t.Run(s.testName, func(t *testing.T) {
|
||||||
|
s.test(ArrangeViews(s.root, s.x0, s.y0, s.width, s.height))
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user