public void TestMeasureOverride() { ResetState(); // test that desired size is null if no children Measure(1000 * rand.NextVector3()); Assert.AreEqual(Vector3.Zero, DesiredSize); // Create and add children var child1 = new MeasureValidator(); var child2 = new MeasureValidator(); var child3 = new MeasureValidator(); Children.Add(child1); Children.Add(child2); Children.Add(child3); // tests desired size depending on the orientation TestMeasureOverrideCore(Orientation.Horizontal); TestMeasureOverrideCore(Orientation.Vertical); TestMeasureOverrideCore(Orientation.InDepth); }
public void TestMeasureOverrideInfinite() { var child1 = new MeasureValidator(); var canvas = new Canvas { Children = { child1 } }; // check that relative 0 x inf available = 0 child1.SetCanvasRelativeSize(Vector3.Zero); child1.ExpectedMeasureValue = Vector3.Zero; canvas.Measure(new Vector3(float.PositiveInfinity)); child1.SetCanvasRelativeSize(new Vector3(float.NaN)); // check sizes with infinite measure values and absolute position child1.SetCanvasAbsolutePosition(new Vector3(1, -1, -3)); child1.ExpectedMeasureValue = new Vector3(float.PositiveInfinity, 0, 0); child1.ReturnedMeasuredValue = new Vector3(2); canvas.Measure(new Vector3(float.PositiveInfinity)); Assert.AreEqual(new Vector3(3, 1, 0), canvas.DesiredSizeWithMargins); // check sizes with infinite measure values and relative position child1.SetCanvasPinOrigin(new Vector3(0, .5f, 1)); child1.SetCanvasRelativePosition(new Vector3(-1)); child1.ExpectedMeasureValue = new Vector3(0); child1.ReturnedMeasuredValue = new Vector3(1); canvas.Measure(new Vector3(float.PositiveInfinity)); Assert.AreEqual(new Vector3(0.5f, 0.25f, 0), canvas.DesiredSizeWithMargins); child1.SetCanvasRelativePosition(new Vector3(0)); child1.ExpectedMeasureValue = new Vector3(float.PositiveInfinity, 0, 0); child1.ReturnedMeasuredValue = new Vector3(1); canvas.Measure(new Vector3(float.PositiveInfinity)); Assert.AreEqual(new Vector3(1, 0.5f, 0), canvas.DesiredSizeWithMargins); child1.SetCanvasRelativePosition(new Vector3(0.5f)); child1.ExpectedMeasureValue = new Vector3(float.PositiveInfinity); child1.ReturnedMeasuredValue = new Vector3(1); canvas.Measure(new Vector3(float.PositiveInfinity)); Assert.AreEqual(new Vector3(2, 1, 2), canvas.DesiredSizeWithMargins); child1.SetCanvasRelativePosition(new Vector3(1f)); child1.ExpectedMeasureValue = new Vector3(float.PositiveInfinity); child1.ReturnedMeasuredValue = new Vector3(1); canvas.Measure(new Vector3(float.PositiveInfinity)); Assert.AreEqual(new Vector3(0, 0.5f, 1), canvas.DesiredSizeWithMargins); child1.SetCanvasRelativePosition(new Vector3(2f)); child1.ExpectedMeasureValue = new Vector3(float.PositiveInfinity); child1.ReturnedMeasuredValue = new Vector3(1); canvas.Measure(new Vector3(float.PositiveInfinity)); Assert.AreEqual(new Vector3(0, 0.25f, 0.5f), canvas.DesiredSizeWithMargins); // check that the maximum is correctly taken var child2 = new MeasureValidator(); var child3 = new MeasureValidator(); canvas.Children.Add(child2); canvas.Children.Add(child3); child1.InvalidateMeasure(); child1.SetCanvasPinOrigin(new Vector3(0.5f)); child1.SetCanvasRelativePosition(new Vector3(0.5f)); child1.ExpectedMeasureValue = new Vector3(float.PositiveInfinity); child1.ReturnedMeasuredValue = new Vector3(10); child2.SetCanvasPinOrigin(new Vector3(0.5f)); child2.SetCanvasRelativePosition(new Vector3(-.1f, .5f, 1.2f)); child2.ExpectedMeasureValue = new Vector3(0, float.PositiveInfinity, float.PositiveInfinity); child2.ReturnedMeasuredValue = new Vector3(30.8f, 5, 48); child3.SetCanvasRelativeSize(new Vector3(0f, 1f, 2f)); child3.ExpectedMeasureValue = new Vector3(0, float.PositiveInfinity, float.PositiveInfinity); child3.ReturnedMeasuredValue = new Vector3(0, 5, 50); canvas.Measure(new Vector3(float.PositiveInfinity)); Assert.AreEqual(new Vector3(14f, 10f, 25f), canvas.DesiredSizeWithMargins); }
public void TestMeasureOverrideAbsolute() { ResetState(); // check that desired size is null if no children Measure(1000 * rand.NextVector3()); Assert.AreEqual(Vector3.Zero, DesiredSize); var child = new MeasureValidator(); Children.Add(child); child.Margin = Thickness.UniformCuboid(10); // check canvas desired size and child provided size with one child out of the available zone var availableSize = new Vector3(100, 200, 300); var childDesiredSize = new Vector3(30, 80, 130); var pinOrigin = Vector3.Zero; TestOutOfBounds(child, childDesiredSize, new Vector3(0, 80, 130), new Vector3(-1, 100, 150), pinOrigin, availableSize, new Vector3(49, 200, 300)); TestOutOfBounds(child, childDesiredSize, new Vector3(0, 80, 130), new Vector3(101, 100, 150), pinOrigin, availableSize, new Vector3(151, 200, 300)); TestOutOfBounds(child, childDesiredSize, new Vector3(30, 0, 130), new Vector3(50, -1, 150), pinOrigin, availableSize, new Vector3(100, 99, 300)); TestOutOfBounds(child, childDesiredSize, new Vector3(30, 0, 130), new Vector3(50, 201, 150), pinOrigin, availableSize, new Vector3(100, 301, 300)); TestOutOfBounds(child, childDesiredSize, new Vector3(30, 80, 0), new Vector3(50, 100, -1), pinOrigin, availableSize, new Vector3(100, 200, 149)); TestOutOfBounds(child, childDesiredSize, new Vector3(30, 80, 0), new Vector3(50, 100, 301), pinOrigin, availableSize, new Vector3(100, 200, 451)); pinOrigin = Vector3.One; TestOutOfBounds(child, childDesiredSize, new Vector3(0, 80, 130), new Vector3(-1, 100, 150), pinOrigin, availableSize, new Vector3(0, 100, 150)); TestOutOfBounds(child, childDesiredSize, new Vector3(0, 80, 130), new Vector3(101, 100, 150), pinOrigin, availableSize, new Vector3(101, 100, 150)); TestOutOfBounds(child, childDesiredSize, new Vector3(30, 0, 130), new Vector3(50, -1, 150), pinOrigin, availableSize, new Vector3(50, 0, 150)); TestOutOfBounds(child, childDesiredSize, new Vector3(30, 0, 130), new Vector3(50, 201, 150), pinOrigin, availableSize, new Vector3(50, 201, 150)); TestOutOfBounds(child, childDesiredSize, new Vector3(30, 80, 0), new Vector3(50, 100, -1), pinOrigin, availableSize, new Vector3(50, 100, 0)); TestOutOfBounds(child, childDesiredSize, new Vector3(30, 80, 0), new Vector3(50, 100, 301), pinOrigin, availableSize, new Vector3(50, 100, 301)); pinOrigin = 0.5f * Vector3.One; TestOutOfBounds(child, childDesiredSize, new Vector3(0, 180, 280), new Vector3(-1, 100, 150), pinOrigin, availableSize, new Vector3(24, 150, 225)); TestOutOfBounds(child, childDesiredSize, new Vector3(0, 180, 280), new Vector3(101, 100, 150), pinOrigin, availableSize, new Vector3(126, 150, 225)); TestOutOfBounds(child, childDesiredSize, new Vector3(80, 0, 280), new Vector3(50, -1, 150), pinOrigin, availableSize, new Vector3(75, 49, 225)); TestOutOfBounds(child, childDesiredSize, new Vector3(80, 0, 280), new Vector3(50, 201, 150), pinOrigin, availableSize, new Vector3(75, 251, 225)); TestOutOfBounds(child, childDesiredSize, new Vector3(80, 180, 0), new Vector3(50, 100, -1), pinOrigin, availableSize, new Vector3(75, 150, 74)); TestOutOfBounds(child, childDesiredSize, new Vector3(80, 180, 0), new Vector3(50, 100, 301), pinOrigin, availableSize, new Vector3(75, 150, 376)); // check canvas desired size and child provided size with one child in the available zone var position = availableSize / 2; TestOutOfBounds(child, childDesiredSize, new Vector3(30, 80, 130), position, Vector3.Zero, availableSize, new Vector3(100, 200, 300)); TestOutOfBounds(child, childDesiredSize, new Vector3(30, 80, 130), position, Vector3.One, availableSize, new Vector3(50, 100, 150)); TestOutOfBounds(child, childDesiredSize, new Vector3(80, 180, 280), position, 0.5f * Vector3.One, availableSize, new Vector3(75, 150, 225)); // check that canvas desired size with several children ResetState(); var child1 = new CanvasTests(); var child2 = new CanvasTests(); var child3 = new CanvasTests(); Children.Add(child1); Children.Add(child2); Children.Add(child3); child1.Margin = new Thickness(10, 20, 30, 40, 50, 60); child2.Margin = new Thickness(60, 50, 40, 30, 20, 10); child3.Margin = new Thickness(1, 2, 3, 4, 5, 6); child1.Width = 100; child1.Height = 200; child1.Depth = 300; child2.Width = 10; child2.Height = 20; child2.Depth = 30; child3.Width = 300; child3.Height = 200; child3.Depth = 100; child1.DependencyProperties.Set(AbsolutePositionPropertyKey, new Vector3(1000, 1100, 1200)); child1.DependencyProperties.Set(PinOriginPropertyKey, new Vector3(0, 0, 1)); child2.DependencyProperties.Set(AbsolutePositionPropertyKey, new Vector3(1050, 1150, 1200)); child2.DependencyProperties.Set(PinOriginPropertyKey, new Vector3(1, 1, 0)); child3.DependencyProperties.Set(AbsolutePositionPropertyKey, new Vector3(500, 600, 700)); child3.DependencyProperties.Set(PinOriginPropertyKey, new Vector3(0.5f, 0.5f, 0.5f)); Measure(Vector3.Zero); Assert.AreEqual(new Vector3(1150, 1370, 1280), DesiredSize); }
private void TestOutOfBounds(MeasureValidator child, Vector3 childDesiredSize, Vector3 childExpectedValue, Vector3 pinPosition, Vector3 pinOrigin, Vector3 availableSize, Vector3 expectedSize) { child.ExpectedMeasureValue = childExpectedValue; child.ReturnedMeasuredValue = childDesiredSize; child.DependencyProperties.Set(AbsolutePositionPropertyKey, pinPosition); child.DependencyProperties.Set(PinOriginPropertyKey, pinOrigin); Measure(availableSize); Assert.AreEqual(expectedSize, DesiredSize); }
public void TestMeasureOverrideRelative() { ResetState(); // check that desired size is null if no children Measure(1000 * rand.NextVector3()); Assert.AreEqual(Vector3.Zero, DesiredSize); var child = new MeasureValidator(); child.DependencyProperties.Set(RelativeSizePropertyKey, new Vector3(0.2f,0.3f,0.4f)); Children.Add(child); child.ExpectedMeasureValue = new Vector3(2,3,4); child.ReturnedMeasuredValue = new Vector3(4,3,2); Measure(10 * Vector3.One); Assert.AreEqual(new Vector3(20f, 10f, 5f), DesiredSize); }
public void TestMeasureOverride() { ResetState(); // test that desired size without content correspond to padding Padding = rand.NextThickness(10, 20, 30, 40, 50, 60); Measure(1000*rand.NextVector3()); var v0 = Vector3.Zero; var expectedSize = CalculateSizeWithThickness(ref v0, ref padding); Assert.AreEqual(expectedSize, DesiredSize); // test desired size with a child var content = new MeasureValidator(); Content = content; var availableSize = 1000 * rand.NextVector3(); content.Margin = rand.NextThickness(60, 50, 40, 30, 20, 10); var availableSizeWithoutPadding = CalculateSizeWithoutThickness(ref availableSize, ref padding); var availableSizeWithoutPaddingChildMargin = CalculateSizeWithoutThickness(ref availableSizeWithoutPadding, ref content.MarginInternal); content.ExpectedMeasureValue = availableSizeWithoutPaddingChildMargin; content.ReturnedMeasuredValue = 100 * rand.NextVector3(); var returnedValueWithMargin = CalculateSizeWithThickness(ref content.ReturnedMeasuredValue, ref content.MarginInternal); expectedSize = CalculateSizeWithThickness(ref returnedValueWithMargin, ref padding); Measure(availableSize); Assert.AreEqual(expectedSize, DesiredSize); }