diff options
Diffstat (limited to 'lay/strain/solve_test.go')
| -rw-r--r-- | lay/strain/solve_test.go | 36 |
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() |