-
-
Notifications
You must be signed in to change notification settings - Fork 1.3k
/
formlayout_test.go
142 lines (111 loc) · 4.49 KB
/
formlayout_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
package layout_test
import (
"image/color"
"testing"
"fyne.io/fyne/v2"
"fyne.io/fyne/v2/canvas"
"fyne.io/fyne/v2/layout"
"fyne.io/fyne/v2/theme"
"fyne.io/fyne/v2/widget"
"github.com/stretchr/testify/assert"
)
func TestFormLayout(t *testing.T) {
gridSize := fyne.NewSize(125, 125)
label1 := canvas.NewRectangle(color.NRGBA{0, 0, 0, 0})
label1.SetMinSize(fyne.NewSize(50, 50))
content1 := canvas.NewRectangle(color.NRGBA{0, 0, 0, 0})
content1.SetMinSize(fyne.NewSize(100, 100))
label2 := canvas.NewRectangle(color.NRGBA{0, 0, 0, 0})
label2.SetMinSize(fyne.NewSize(70, 30))
content2 := canvas.NewRectangle(color.NRGBA{0, 0, 0, 0})
content2.SetMinSize(fyne.NewSize(120, 80))
container := &fyne.Container{
Objects: []fyne.CanvasObject{label1, content1, label2, content2},
}
container.Resize(gridSize)
layout.NewFormLayout().Layout(container.Objects, gridSize)
assert.Equal(t, fyne.NewSize(70, 100), label1.Size())
assert.Equal(t, fyne.NewSize(120, 100), content1.Size())
assert.Equal(t, fyne.NewSize(70, 80), label2.Size())
assert.Equal(t, fyne.NewSize(120, 80), content2.Size())
}
func TestFormLayout_Hidden(t *testing.T) {
gridSize := fyne.NewSize(190+theme.Padding(), 125)
label1 := canvas.NewRectangle(color.NRGBA{0, 0, 0, 0})
label1.SetMinSize(fyne.NewSize(70, 50))
label1.Hide()
content1 := canvas.NewRectangle(color.NRGBA{0, 0, 0, 0})
content1.SetMinSize(fyne.NewSize(120, 100))
content1.Hide()
label2 := canvas.NewRectangle(color.NRGBA{0, 0, 0, 0})
label2.SetMinSize(fyne.NewSize(50, 30))
content2 := canvas.NewRectangle(color.NRGBA{0, 0, 0, 0})
content2.SetMinSize(fyne.NewSize(100, 80))
container := &fyne.Container{
Objects: []fyne.CanvasObject{label1, content1, label2, content2},
}
container.Resize(gridSize)
layout.NewFormLayout().Layout(container.Objects, gridSize)
assert.Equal(t, fyne.NewSize(50, 80), label2.Size())
assert.Equal(t, fyne.NewSize(140, 80), content2.Size())
assert.Equal(t, fyne.NewPos(0, 0), label2.Position())
assert.Equal(t, fyne.NewPos(50+theme.Padding(), 0), content2.Position())
}
func TestFormLayout_StretchX(t *testing.T) {
wideSize := fyne.NewSize(150, 50)
label1 := canvas.NewRectangle(color.NRGBA{0, 0, 0, 0})
label1.SetMinSize(fyne.NewSize(50, 50))
content1 := canvas.NewRectangle(color.NRGBA{0, 0, 0, 0})
content1.SetMinSize(fyne.NewSize(50, 50))
container := &fyne.Container{
Objects: []fyne.CanvasObject{label1, content1},
}
container.Resize(wideSize)
layout.NewFormLayout().Layout(container.Objects, wideSize)
assert.Equal(t, fyne.NewSize(50, 50), label1.Size())
assert.Equal(t, fyne.NewSize(wideSize.Width-50-theme.Padding(), 50), content1.Size())
}
func TestFormLayout_MinSize(t *testing.T) {
label1 := canvas.NewRectangle(color.NRGBA{0, 0, 0, 0})
label1.SetMinSize(fyne.NewSize(50, 50))
content1 := canvas.NewRectangle(color.NRGBA{0, 0, 0, 0})
content1.SetMinSize(fyne.NewSize(100, 100))
label2 := canvas.NewRectangle(color.NRGBA{0, 0, 0, 0})
label2.SetMinSize(fyne.NewSize(70, 30))
content2 := canvas.NewRectangle(color.NRGBA{0, 0, 0, 0})
content2.SetMinSize(fyne.NewSize(120, 80))
container := &fyne.Container{
Objects: []fyne.CanvasObject{label1, content1, label2, content2},
}
l := layout.NewFormLayout()
layoutMin := l.MinSize(container.Objects)
expectedRowWidth := 70 + 120 + theme.Padding()
expectedRowHeight := 100 + 80 + theme.Padding()
assert.Equal(t, fyne.NewSize(expectedRowWidth, expectedRowHeight), layoutMin)
text := canvas.NewText("Text", color.Black)
value := widget.NewLabel("Text")
l = layout.NewFormLayout()
layoutMin = l.MinSize([]fyne.CanvasObject{text, value})
// check that the text minsize is padded to match a label
assert.Equal(t, value.MinSize().Width*2+theme.Padding(), layoutMin.Width)
}
func TestFormLayout_MinSize_Hidden(t *testing.T) {
label1 := canvas.NewRectangle(color.NRGBA{0, 0, 0, 0})
label1.SetMinSize(fyne.NewSize(50, 50))
content1 := canvas.NewRectangle(color.NRGBA{0, 0, 0, 0})
content1.SetMinSize(fyne.NewSize(100, 100))
label2 := canvas.NewRectangle(color.NRGBA{0, 0, 0, 0})
label2.SetMinSize(fyne.NewSize(70, 30))
label2.Hide()
content2 := canvas.NewRectangle(color.NRGBA{0, 0, 0, 0})
content2.SetMinSize(fyne.NewSize(120, 80))
content2.Hide()
container := &fyne.Container{
Objects: []fyne.CanvasObject{label1, content1, label2, content2},
}
l := layout.NewFormLayout()
layoutMin := l.MinSize(container.Objects)
expectedRowWidth := 50 + 100 + theme.Padding()
expectedRowHeight := float32(100)
assert.Equal(t, fyne.NewSize(expectedRowWidth, expectedRowHeight), layoutMin)
}