aboutsummaryrefslogtreecommitdiffstats
path: root/lay/strain/solve_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'lay/strain/solve_test.go')
-rw-r--r--lay/strain/solve_test.go36
1 files changed, 25 insertions, 11 deletions
diff --git a/lay/strain/solve_test.go b/lay/strain/solve_test.go
index d360c53..6281124 100644
--- a/lay/strain/solve_test.go
+++ b/lay/strain/solve_test.go
@@ -8,6 +8,7 @@ import (
"testing/synctest"
"github.com/lithdew/casso"
+ "github.com/stretchr/testify/require"
"golang.org/x/exp/shiny/unit"
"golang.org/x/image/math/fixed"
@@ -39,12 +40,6 @@ func (st solverTest) Close() {
}
}
-func (st solverTest) addConstraint(op casso.Op, lhs, rhs casso.Symbol) {
- if err := st.Solver.AddConstraint(op, lhs, rhs); err != nil {
- st.t.Error(err)
- }
-}
-
func (st solverTest) solve(container image.Rectangle, validate func(fields []image.Rectangle) error) {
fields, err := st.Solver.Solve(container)
if err != nil {
@@ -91,10 +86,8 @@ func TestSingleField(t *testing.T) {
// Add layout constraints
container := st.Solver.Container()
field := st.Solver.Field(0)
- st.addConstraint(casso.EQ, field.Origin.X, container.Origin.X)
- st.addConstraint(casso.EQ, field.Origin.Y, container.Origin.Y)
- st.addConstraint(casso.EQ, field.Size.X, container.Size.X)
- st.addConstraint(casso.EQ, field.Size.Y, container.Size.Y)
+ require.NoError(t, st.Solver.AddConstraintPt(casso.EQ, field.Origin, container.Origin))
+ require.NoError(t, st.Solver.AddConstraintPt(casso.EQ, field.Size, container.Size))
// Solve
for _, container := range []image.Rectangle{
@@ -107,7 +100,7 @@ func TestSingleField(t *testing.T) {
}
}
-// Widget gives its minimum size.
+// Field gives its minimum size.
func TestFieldMinSize(t *testing.T) {
t.Parallel()
synctest.Test(t, func(t *testing.T) {
@@ -140,6 +133,27 @@ func TestFieldMinSize(t *testing.T) {
})
}
+// Field min size larger than container.
+func TestFieldMinSizeLargerThanContainer(t *testing.T) {
+ t.Parallel()
+ synctest.Test(t, func(t *testing.T) {
+ // Setup
+ constraints := make(chan strain.Constraint)
+ st := newSolverTest(t, []<-chan strain.Constraint{constraints})
+ defer st.Close()
+ defer close(constraints)
+
+ // Add widget constraints
+ constraints <- strain.Constraint{strain.Width, casso.GTE, unit.Value{200, unit.Px}}
+ constraints <- strain.Constraint{strain.Height, casso.GTE, unit.Value{300, unit.Px}}
+ synctest.Wait()
+
+ // Solve
+ container := image.Rect(12, 34, 100, 200)
+ st.solve(container, validateEq([]image.Rectangle{container}))
+ })
+}
+
// Solver with only layout constaints, no field constraints.
func TestLayConstrs(t *testing.T) {
t.Parallel()