public void RelativePositionRespectsPadding(double left, double top, double right, double bottom, double expectedX, double expectedY) { double width = 20; double height = 20; double propX = 0.5; double propY = 0.5; var abs = CreateTestLayout(); var padding = new Thickness(left, top, right, bottom); abs.Padding.Returns(padding); var child = CreateTestView(); SubstituteChildren(abs, child); var childBounds = new Rectangle(propX, propY, width, height); SetLayoutBounds(abs, child, childBounds); SetLayoutFlags(abs, child, AbsoluteLayoutFlags.PositionProportional); var manager = new AbsoluteLayoutManager(abs); manager.Measure(100, 100); manager.ArrangeChildren(new Rectangle(0, 0, 100, 100)); var expectedRectangle = new Rectangle(expectedX, expectedY, width, height); child.Received().Arrange(Arg.Is(expectedRectangle)); }
public void ArrangeAccountsForFill() { var abs = CreateTestLayout(); var child = CreateTestView(); SubstituteChildren(abs, child); var childBounds = new Rectangle(0, 0, 100, 100); SetLayoutBounds(abs, child, childBounds); var layoutManager = new AbsoluteLayoutManager(abs); _ = layoutManager.Measure(double.PositiveInfinity, double.PositiveInfinity); var arrangedWidth = 1000; var arrangedHeight = 1000; var target = new Rectangle(Point.Zero, new Size(arrangedWidth, arrangedHeight)); var actual = layoutManager.ArrangeChildren(target); // Since we're arranging in a space larger than needed and the layout is set to Fill in both directions, // we expect the returned actual arrangement size to be as large as the target space Assert.Equal(arrangedWidth, actual.Width); Assert.Equal(arrangedHeight, actual.Height); }
public void RelativePositionRelativeSize(double propX, double propY, double propHeight, double propWidth) { var abs = CreateTestLayout(); var child = CreateTestView(); SubstituteChildren(abs, child); var childBounds = new Rectangle(propX, propY, propWidth, propHeight); SetLayoutBounds(abs, child, childBounds); SetLayoutFlags(abs, child, AbsoluteLayoutFlags.All); var manager = new AbsoluteLayoutManager(abs); manager.Measure(100, 100); manager.ArrangeChildren(new Rectangle(0, 0, 100, 100)); double expectedWidth = 100 * propWidth; double expectedHeight = 100 * propHeight; double expectedX = (100 - expectedWidth) * propX; double expectedY = (100 - expectedHeight) * propY; var expectedRectangle = new Rectangle(expectedX, expectedY, expectedWidth, expectedHeight); child.Received().Arrange(Arg.Is(expectedRectangle)); }
Size MeasureAndArrange(IAbsoluteLayout absoluteLayout, double widthConstraint = double.PositiveInfinity, double heightConstraint = double.PositiveInfinity, double left = 0, double top = 0) { var manager = new AbsoluteLayoutManager(absoluteLayout); var measuredSize = manager.Measure(widthConstraint, heightConstraint); manager.ArrangeChildren(new Rectangle(new Point(left, top), measuredSize)); return(measuredSize); }
public void MeasureRespectsMinWidth(double minWidth, double viewWidth, double expectedWidth) { var abs = CreateTestLayout(); var child = CreateTestView(); SubstituteChildren(abs, child); var childBounds = new Rectangle(0, 0, viewWidth, 100); SetLayoutBounds(abs, child, childBounds); abs.MinimumWidth.Returns(minWidth); var gridLayoutManager = new AbsoluteLayoutManager(abs); var measure = gridLayoutManager.Measure(double.PositiveInfinity, double.PositiveInfinity); Assert.Equal(expectedWidth, measure.Width); }
public void MeasureRespectsMaxHeight(double maxHeight, double viewHeight, double expectedHeight) { var abs = CreateTestLayout(); var child = CreateTestView(); SubstituteChildren(abs, child); var childBounds = new Rectangle(0, 0, 100, viewHeight); SetLayoutBounds(abs, child, childBounds); abs.MaximumHeight.Returns(maxHeight); var layoutManager = new AbsoluteLayoutManager(abs); var measure = layoutManager.Measure(double.PositiveInfinity, double.PositiveInfinity); Assert.Equal(expectedHeight, measure.Height); }
public void ChildMeasureRespectsAbsoluteBounds() { double expectedWidth = 115; double expectedHeight = 230; var abs = CreateTestLayout(); var child = CreateTestView(); SubstituteChildren(abs, child); var childBounds = new Rectangle(0, 0, expectedWidth, expectedHeight); SetLayoutBounds(abs, child, childBounds); var gridLayoutManager = new AbsoluteLayoutManager(abs); var measure = gridLayoutManager.Measure(double.PositiveInfinity, double.PositiveInfinity); child.Received().Measure(Arg.Is(expectedWidth), Arg.Is(expectedHeight)); }
public void MinHeightDominatesMaxHeight() { var abs = CreateTestLayout(); var child = CreateTestView(); SubstituteChildren(abs, child); var childBounds = new Rectangle(0, 0, 100, 100); SetLayoutBounds(abs, child, childBounds); abs.MinimumHeight.Returns(75); abs.MaximumHeight.Returns(50); var gridLayoutManager = new AbsoluteLayoutManager(abs); var measure = gridLayoutManager.Measure(double.PositiveInfinity, double.PositiveInfinity); // The minimum value should beat out the maximum value Assert.Equal(75, measure.Height); }
public void MaxWidthDominatesWidth() { var abs = CreateTestLayout(); var child = CreateTestView(); SubstituteChildren(abs, child); var childBounds = new Rectangle(0, 0, 100, 100); SetLayoutBounds(abs, child, childBounds); abs.Width.Returns(75); abs.MaximumWidth.Returns(50); var gridLayoutManager = new AbsoluteLayoutManager(abs); var measure = gridLayoutManager.Measure(double.PositiveInfinity, double.PositiveInfinity); // The maximum value beats out the explicit value Assert.Equal(50, measure.Width); }
public void ChildMeasureRespectsProportionalBounds() { double expectedWidth = 0.5; double expectedHeight = 0.6; double widthConstraint = 200; double heightConstraint = 200; var abs = CreateTestLayout(); var child = CreateTestView(); SubstituteChildren(abs, child); var childBounds = new Rectangle(0, 0, expectedWidth, expectedHeight); SetLayoutBounds(abs, child, childBounds); SetLayoutFlags(abs, child, AbsoluteLayoutFlags.SizeProportional); var gridLayoutManager = new AbsoluteLayoutManager(abs); var measure = gridLayoutManager.Measure(widthConstraint, heightConstraint); child.Received().Measure(Arg.Is(expectedWidth * widthConstraint), Arg.Is(expectedHeight * heightConstraint)); }
public void RtlShouldHaveFirstItemOnTheRight() { var abs = CreateTestLayout(); var child = CreateTestView(); SubstituteChildren(abs, child); var childBounds = new Rect(10, 0, 100, 100); SetLayoutBounds(abs, child, childBounds); abs.FlowDirection.Returns(FlowDirection.RightToLeft); var manager = new AbsoluteLayoutManager(abs); var measuredSize = manager.Measure(double.PositiveInfinity, 100); manager.ArrangeChildren(new Rect(Point.Zero, measuredSize)); // We expect that the view should be arranged on the right var expectedRectangle = new Rect(0, 0, 100, 100); abs[0].Received().Arrange(Arg.Is(expectedRectangle)); }
public void AbsolutePositionRelativeSize() { var abs = CreateTestLayout(); var child = CreateTestView(); SubstituteChildren(abs, child); var childBounds = new Rectangle(10, 20, 0.4, 0.5); SetLayoutBounds(abs, child, childBounds); SetLayoutFlags(abs, child, AbsoluteLayoutFlags.SizeProportional); var manager = new AbsoluteLayoutManager(abs); var measure = manager.Measure(100, 100); manager.ArrangeChildren(new Rectangle(0, 0, 100, 100)); var expectedMeasure = new Size(10 + 40, 20 + 50); Assert.Equal(expectedMeasure, measure); child.Received().Arrange(Arg.Is <Rectangle>(r => r.X == 10 && r.Y == 20 && r.Width == 40 && r.Height == 50)); }
public void RelativePositionAbsoluteSize(double width, double height, double propX, double propY) { var abs = CreateTestLayout(); var child = CreateTestView(); SubstituteChildren(abs, child); var childBounds = new Rect(propX, propY, width, height); SetLayoutBounds(abs, child, childBounds); SetLayoutFlags(abs, child, AbsoluteLayoutFlags.PositionProportional); var manager = new AbsoluteLayoutManager(abs); manager.Measure(100, 100); manager.ArrangeChildren(new Rect(0, 0, 100, 100)); double expectedX = (100 - width) * propX; double expectedY = (100 - height) * propY; var expectedRectangle = new Rect(expectedX, expectedY, width, height); child.Received().Arrange(Arg.Is(expectedRectangle)); }