예제 #1
0
        public void MeasureCoreTest()
        {
            LayoutTestElement element = new LayoutTestElement {
                MeasureSize = new Size(200, 100)
            };

            element.Measure(new Size(200, 100));
            Assert.AreEqual(new Size(200, 100), element.DesiredSize);

            element.Measure(Size.Infinity);
            Assert.AreEqual(new Size(200, 100), element.DesiredSize);

            element.Measure(Size.Zero);
            Assert.AreEqual(new Size(200, 100), element.DesiredSize);

            element.Margin = new Thickness(10, 20, 30, 40);
            element.Measure(new Size(200, 100));
            Assert.AreEqual(new Size(240, 160), element.DesiredSize);

            element.Measure(Size.Infinity);
            Assert.AreEqual(new Size(240, 160), element.DesiredSize);

            element.Measure(Size.Zero);
            Assert.AreEqual(new Size(240, 160), element.DesiredSize);

            element.Width  = 400;
            element.Height = 300;
            element.Measure(new Size(200, 100));
            Assert.AreEqual(new Size(440, 360), element.DesiredSize);

            element.Measure(Size.Infinity);
            Assert.AreEqual(new Size(440, 360), element.DesiredSize);

            element.Measure(Size.Zero);
            Assert.AreEqual(new Size(440, 360), element.DesiredSize);
        }
예제 #2
0
        public void ArrangeCoreTest()
        {
            LayoutTestElement element = new LayoutTestElement {
                MeasureSize = new Size(200, 100)
            };

            element.Arrange(new Rect(100, 50));
            Assert.AreEqual(new Size(100, 50), element.LastAvailableSize);
            Assert.AreEqual(new Size(100, 50), element.VisualSize);
            Assert.AreEqual(new Point(0, 0), element.VisualOffset);
            Assert.AreEqual(100, element.ActualWidth);
            Assert.AreEqual(50, element.ActualHeight);

            element.Width  = 200;
            element.Height = 100;
            element.Arrange(new Rect(100, 50));
            Assert.AreEqual(new Size(200, 100), element.LastAvailableSize);
            Assert.AreEqual(new Size(200, 100), element.VisualSize);
            Assert.AreEqual(new Point(-50, -25), element.VisualOffset);
            Assert.AreEqual(200, element.ActualWidth);
            Assert.AreEqual(100, element.ActualHeight);

            element.Width  = Double.NaN;
            element.Height = Double.NaN;
            element.Arrange(new Rect(200, 100));
            Assert.AreEqual(new Size(200, 100), element.LastAvailableSize);
            Assert.AreEqual(new Size(200, 100), element.VisualSize);
            Assert.AreEqual(new Point(0, 0), element.VisualOffset);
            Assert.AreEqual(200, element.ActualWidth);
            Assert.AreEqual(100, element.ActualHeight);

            element.HorizontalAlignment = HorizontalAlignment.Left;
            element.VerticalAlignment   = VerticalAlignment.Top;
            element.Arrange(new Rect(300, 200));
            Assert.AreEqual(new Size(300, 200), element.LastAvailableSize);
            Assert.AreEqual(new Size(200, 100), element.VisualSize);
            Assert.AreEqual(new Point(0, 0), element.VisualOffset);
            Assert.AreEqual(200, element.ActualWidth);
            Assert.AreEqual(100, element.ActualHeight);

            element.HorizontalAlignment = HorizontalAlignment.Center;
            element.VerticalAlignment   = VerticalAlignment.Bottom;
            element.Arrange(new Rect(300, 200));
            Assert.AreEqual(new Size(300, 200), element.LastAvailableSize);
            Assert.AreEqual(new Size(200, 100), element.VisualSize);
            Assert.AreEqual(new Point(50, 100), element.VisualOffset);
            Assert.AreEqual(200, element.ActualWidth);
            Assert.AreEqual(100, element.ActualHeight);

            element.HorizontalAlignment = HorizontalAlignment.Right;
            element.VerticalAlignment   = VerticalAlignment.Center;
            element.Arrange(new Rect(300, 200));
            Assert.AreEqual(new Size(300, 200), element.LastAvailableSize);
            Assert.AreEqual(new Size(200, 100), element.VisualSize);
            Assert.AreEqual(new Point(100, 50), element.VisualOffset);
            Assert.AreEqual(200, element.ActualWidth);
            Assert.AreEqual(100, element.ActualHeight);

            element.HorizontalAlignment = HorizontalAlignment.Stretch;
            element.VerticalAlignment   = VerticalAlignment.Stretch;
            element.Arrange(new Rect(300, 200));
            Assert.AreEqual(new Size(300, 200), element.LastAvailableSize);
            Assert.AreEqual(new Size(300, 200), element.VisualSize);
            Assert.AreEqual(new Point(0, 0), element.VisualOffset);
            Assert.AreEqual(300, element.ActualWidth);
            Assert.AreEqual(200, element.ActualHeight);

            element.ArrangeSize = new Size(200, 100);
            element.InvalidateArrange();

            element.HorizontalAlignment = HorizontalAlignment.Stretch;
            element.VerticalAlignment   = VerticalAlignment.Stretch;
            element.Arrange(new Rect(300, 200));
            Assert.AreEqual(new Size(300, 200), element.LastAvailableSize);
            Assert.AreEqual(new Size(200, 100), element.VisualSize);
            Assert.AreEqual(new Point(50, 50), element.VisualOffset);
            Assert.AreEqual(200, element.ActualWidth);
            Assert.AreEqual(100, element.ActualHeight);
        }
예제 #3
0
        public void ArrangeCoreMarginTest()
        {
            LayoutTestElement element = new LayoutTestElement {
                MeasureSize = new Size(200, 100), Margin = new Thickness(10, 20, 30, 40)
            };

            element.Arrange(new Rect(200, 100));
            Assert.AreEqual(new Size(160, 40), element.LastAvailableSize);
            Assert.AreEqual(new Size(160, 40), element.VisualSize);
            Assert.AreEqual(new Point(10, 20), element.VisualOffset);
            Assert.AreEqual(160, element.ActualWidth);
            Assert.AreEqual(40, element.ActualHeight);

            element.Width  = 200;
            element.Height = 100;
            element.InvalidateArrange();
            element.Arrange(new Rect(200, 100));
            Assert.AreEqual(new Size(200, 100), element.LastAvailableSize);
            Assert.AreEqual(new Size(200, 100), element.VisualSize);
            Assert.AreEqual(new Point(-10, -10), element.VisualOffset);
            Assert.AreEqual(200, element.ActualWidth);
            Assert.AreEqual(100, element.ActualHeight);

            element.Width  = Double.NaN;
            element.Height = Double.NaN;
            element.Arrange(new Rect(240, 160));
            Assert.AreEqual(new Size(200, 100), element.LastAvailableSize);
            Assert.AreEqual(new Size(200, 100), element.VisualSize);
            Assert.AreEqual(new Point(10, 20), element.VisualOffset);
            Assert.AreEqual(200, element.ActualWidth);
            Assert.AreEqual(100, element.ActualHeight);

            element.HorizontalAlignment = HorizontalAlignment.Left;
            element.VerticalAlignment   = VerticalAlignment.Top;
            element.Arrange(new Rect(340, 260));
            Assert.AreEqual(new Size(300, 200), element.LastAvailableSize);
            Assert.AreEqual(new Size(200, 100), element.VisualSize);
            Assert.AreEqual(new Point(10, 20), element.VisualOffset);
            Assert.AreEqual(200, element.ActualWidth);
            Assert.AreEqual(100, element.ActualHeight);

            element.HorizontalAlignment = HorizontalAlignment.Center;
            element.VerticalAlignment   = VerticalAlignment.Bottom;
            element.Arrange(new Rect(340, 260));
            Assert.AreEqual(new Size(300, 200), element.LastAvailableSize);
            Assert.AreEqual(new Size(200, 100), element.VisualSize);
            Assert.AreEqual(new Point(60, 120), element.VisualOffset);
            Assert.AreEqual(200, element.ActualWidth);
            Assert.AreEqual(100, element.ActualHeight);

            element.HorizontalAlignment = HorizontalAlignment.Right;
            element.VerticalAlignment   = VerticalAlignment.Center;
            element.Arrange(new Rect(340, 260));
            Assert.AreEqual(new Size(300, 200), element.LastAvailableSize);
            Assert.AreEqual(new Size(200, 100), element.VisualSize);
            Assert.AreEqual(new Point(110, 70), element.VisualOffset);
            Assert.AreEqual(200, element.ActualWidth);
            Assert.AreEqual(100, element.ActualHeight);

            element.HorizontalAlignment = HorizontalAlignment.Stretch;
            element.VerticalAlignment   = VerticalAlignment.Stretch;
            element.Arrange(new Rect(340, 260));
            Assert.AreEqual(new Size(300, 200), element.LastAvailableSize);
            Assert.AreEqual(new Size(300, 200), element.VisualSize);
            Assert.AreEqual(new Point(10, 20), element.VisualOffset);
            Assert.AreEqual(300, element.ActualWidth);
            Assert.AreEqual(200, element.ActualHeight);

            element.ArrangeSize = new Size(200, 100);
            element.InvalidateArrange();

            element.HorizontalAlignment = HorizontalAlignment.Stretch;
            element.VerticalAlignment   = VerticalAlignment.Stretch;
            element.Arrange(new Rect(340, 260));
            Assert.AreEqual(new Size(300, 200), element.LastAvailableSize);
            Assert.AreEqual(new Size(200, 100), element.VisualSize);
            Assert.AreEqual(new Point(60, 70), element.VisualOffset);
            Assert.AreEqual(200, element.ActualWidth);
            Assert.AreEqual(100, element.ActualHeight);
        }
예제 #4
0
        public void ArrangeCoreTest()
        {
            TestTaskScheduler scheduler = (TestTaskScheduler)ApplicationHost.Current.TaskScheduler;

            using (scheduler.DisableImmediateProcessing())
            {
                LayoutTestElement element = new LayoutTestElement {
                    IsRootElement = true, MeasureSize = new Size(200, 100)
                };

                element.Arrange(new Rect(100, 50));
                Assert.AreEqual(1, element.MeasureCount);
                Assert.AreEqual(1, element.ArrangeCount);
                Assert.AreEqual(new Size(100, 50), element.PreviousAvailableSize);
                Assert.AreEqual(new Size(100, 50), element.VisualSize);
                Assert.AreEqual(new Point(0, 0), element.VisualOffset);
                Assert.AreEqual(100, element.ActualWidth);
                Assert.AreEqual(50, element.ActualHeight);

                element.Width  = 200;
                element.Height = 100;
                element.Arrange(new Rect(100, 50));
                Assert.AreEqual(2, element.MeasureCount);
                Assert.AreEqual(2, element.ArrangeCount);
                Assert.AreEqual(new Size(200, 100), element.VisualSize);
                Assert.AreEqual(new Point(-50, -25), element.VisualOffset);
                Assert.AreEqual(200, element.ActualWidth);
                Assert.AreEqual(100, element.ActualHeight);

                element.Width  = Double.NaN;
                element.Height = Double.NaN;
                element.Arrange(new Rect(200, 100));
                Assert.AreEqual(3, element.MeasureCount);
                Assert.AreEqual(3, element.ArrangeCount);
                Assert.AreEqual(new Size(200, 100), element.PreviousAvailableSize);
                Assert.AreEqual(new Size(200, 100), element.VisualSize);
                Assert.AreEqual(new Point(0, 0), element.VisualOffset);
                Assert.AreEqual(200, element.ActualWidth);
                Assert.AreEqual(100, element.ActualHeight);

                element.HorizontalAlignment = HorizontalAlignment.Left;
                element.VerticalAlignment   = VerticalAlignment.Top;
                element.Arrange(new Rect(300, 200));
                Assert.AreEqual(4, element.MeasureCount);
                Assert.AreEqual(4, element.ArrangeCount);
                Assert.AreEqual(new Size(200, 100), element.VisualSize);
                Assert.AreEqual(new Point(0, 0), element.VisualOffset);
                Assert.AreEqual(200, element.ActualWidth);
                Assert.AreEqual(100, element.ActualHeight);

                element.HorizontalAlignment = HorizontalAlignment.Center;
                element.VerticalAlignment   = VerticalAlignment.Bottom;
                element.Arrange(new Rect(300, 200));
                Assert.AreEqual(5, element.MeasureCount);
                Assert.AreEqual(5, element.ArrangeCount);
                Assert.AreEqual(new Size(200, 100), element.VisualSize);
                Assert.AreEqual(new Point(50, 100), element.VisualOffset);
                Assert.AreEqual(200, element.ActualWidth);
                Assert.AreEqual(100, element.ActualHeight);

                element.HorizontalAlignment = HorizontalAlignment.Right;
                element.VerticalAlignment   = VerticalAlignment.Center;
                element.Arrange(new Rect(300, 200));
                Assert.AreEqual(6, element.MeasureCount);
                Assert.AreEqual(6, element.ArrangeCount);
                Assert.AreEqual(new Size(200, 100), element.VisualSize);
                Assert.AreEqual(new Point(100, 50), element.VisualOffset);
                Assert.AreEqual(200, element.ActualWidth);
                Assert.AreEqual(100, element.ActualHeight);

                element.HorizontalAlignment = HorizontalAlignment.Stretch;
                element.VerticalAlignment   = VerticalAlignment.Stretch;
                element.Arrange(new Rect(300, 200));
                Assert.AreEqual(7, element.MeasureCount);
                Assert.AreEqual(7, element.ArrangeCount);
                Assert.AreEqual(new Size(300, 200), element.VisualSize);
                Assert.AreEqual(new Point(0, 0), element.VisualOffset);
                Assert.AreEqual(300, element.ActualWidth);
                Assert.AreEqual(200, element.ActualHeight);

                element.ArrangeSize = new Size(200, 100);
                element.InvalidateArrange();
                element.Arrange(new Rect(300, 200));
                Assert.AreEqual(7, element.MeasureCount);
                Assert.AreEqual(8, element.ArrangeCount);
                Assert.AreEqual(new Size(200, 100), element.VisualSize);
                Assert.AreEqual(new Point(50, 50), element.VisualOffset);
                Assert.AreEqual(200, element.ActualWidth);
                Assert.AreEqual(100, element.ActualHeight);
            }
        }
예제 #5
0
        public void ArrangeCoreMarginTest()
        {
            TestTaskScheduler scheduler = (TestTaskScheduler)ApplicationHost.Current.TaskScheduler;

            using (scheduler.DisableImmediateProcessing())
            {
                LayoutTestElement element = new LayoutTestElement {
                    MeasureSize = new Size(200, 100), Margin = new Thickness(10, 20, 30, 40)
                };

                element.Arrange(new Rect(200, 100));
                Assert.AreEqual(1, element.MeasureCount);
                Assert.AreEqual(1, element.ArrangeCount);
                Assert.AreEqual(new Size(160, 40), element.VisualSize);
                Assert.AreEqual(new Point(10, 20), element.VisualOffset);
                Assert.AreEqual(160, element.ActualWidth);
                Assert.AreEqual(40, element.ActualHeight);

                element.Width  = 200;
                element.Height = 100;
                element.Arrange(new Rect(200, 100));
                Assert.AreEqual(2, element.MeasureCount);
                Assert.AreEqual(2, element.ArrangeCount);
                Assert.AreEqual(new Size(200, 100), element.VisualSize);
                Assert.AreEqual(new Point(-10, -10), element.VisualOffset);
                Assert.AreEqual(200, element.ActualWidth);
                Assert.AreEqual(100, element.ActualHeight);

                element.Width  = Double.NaN;
                element.Height = Double.NaN;
                element.Arrange(new Rect(240, 160));
                Assert.AreEqual(3, element.MeasureCount);
                Assert.AreEqual(3, element.ArrangeCount);
                Assert.AreEqual(new Size(200, 100), element.VisualSize);
                Assert.AreEqual(new Point(10, 20), element.VisualOffset);
                Assert.AreEqual(200, element.ActualWidth);
                Assert.AreEqual(100, element.ActualHeight);

                element.HorizontalAlignment = HorizontalAlignment.Left;
                element.VerticalAlignment   = VerticalAlignment.Top;
                element.Arrange(new Rect(340, 260));
                Assert.AreEqual(4, element.MeasureCount);
                Assert.AreEqual(4, element.ArrangeCount);
                Assert.AreEqual(new Size(200, 100), element.VisualSize);
                Assert.AreEqual(new Point(10, 20), element.VisualOffset);
                Assert.AreEqual(200, element.ActualWidth);
                Assert.AreEqual(100, element.ActualHeight);

                element.HorizontalAlignment = HorizontalAlignment.Center;
                element.VerticalAlignment   = VerticalAlignment.Bottom;
                element.Arrange(new Rect(340, 260));
                Assert.AreEqual(5, element.MeasureCount);
                Assert.AreEqual(5, element.ArrangeCount);
                Assert.AreEqual(new Size(200, 100), element.VisualSize);
                Assert.AreEqual(new Point(60, 120), element.VisualOffset);
                Assert.AreEqual(200, element.ActualWidth);
                Assert.AreEqual(100, element.ActualHeight);

                element.HorizontalAlignment = HorizontalAlignment.Right;
                element.VerticalAlignment   = VerticalAlignment.Center;
                element.Arrange(new Rect(340, 260));
                Assert.AreEqual(6, element.MeasureCount);
                Assert.AreEqual(6, element.ArrangeCount);
                Assert.AreEqual(new Size(200, 100), element.VisualSize);
                Assert.AreEqual(new Point(110, 70), element.VisualOffset);
                Assert.AreEqual(200, element.ActualWidth);
                Assert.AreEqual(100, element.ActualHeight);

                element.HorizontalAlignment = HorizontalAlignment.Stretch;
                element.VerticalAlignment   = VerticalAlignment.Stretch;
                element.Arrange(new Rect(340, 260));
                Assert.AreEqual(7, element.MeasureCount);
                Assert.AreEqual(7, element.ArrangeCount);
                Assert.AreEqual(new Size(300, 200), element.VisualSize);
                Assert.AreEqual(new Point(10, 20), element.VisualOffset);
                Assert.AreEqual(300, element.ActualWidth);
                Assert.AreEqual(200, element.ActualHeight);

                element.ArrangeSize = new Size(200, 100);
                element.InvalidateArrange();
                element.Arrange(new Rect(340, 260));
                Assert.AreEqual(7, element.MeasureCount);
                Assert.AreEqual(8, element.ArrangeCount);
                Assert.AreEqual(new Size(200, 100), element.VisualSize);
                Assert.AreEqual(new Point(60, 70), element.VisualOffset);
                Assert.AreEqual(200, element.ActualWidth);
                Assert.AreEqual(100, element.ActualHeight);
            }
        }
예제 #6
0
        public void ArrangeCoreTest()
        {
            LayoutTestElement element = new LayoutTestElement { MeasureSize = new Size(200, 100) };

            element.Arrange(new Rect(100, 50));
            Assert.AreEqual(new Size(100, 50), element.LastAvailableSize);
            Assert.AreEqual(new Size(100, 50), element.VisualSize);
            Assert.AreEqual(new Point(0, 0), element.VisualOffset);
            Assert.AreEqual(100, element.ActualWidth);
            Assert.AreEqual(50, element.ActualHeight);

            element.Width = 200;
            element.Height = 100;
            element.Arrange(new Rect(100, 50));
            Assert.AreEqual(new Size(200, 100), element.LastAvailableSize);
            Assert.AreEqual(new Size(200, 100), element.VisualSize);
            Assert.AreEqual(new Point(-50, -25), element.VisualOffset);
            Assert.AreEqual(200, element.ActualWidth);
            Assert.AreEqual(100, element.ActualHeight);

            element.Width = Double.NaN;
            element.Height = Double.NaN;
            element.Arrange(new Rect(200, 100));
            Assert.AreEqual(new Size(200, 100), element.LastAvailableSize);
            Assert.AreEqual(new Size(200, 100), element.VisualSize);
            Assert.AreEqual(new Point(0, 0), element.VisualOffset);
            Assert.AreEqual(200, element.ActualWidth);
            Assert.AreEqual(100, element.ActualHeight);

            element.HorizontalAlignment = HorizontalAlignment.Left;
            element.VerticalAlignment = VerticalAlignment.Top;
            element.Arrange(new Rect(300, 200));
            Assert.AreEqual(new Size(300, 200), element.LastAvailableSize);
            Assert.AreEqual(new Size(200, 100), element.VisualSize);
            Assert.AreEqual(new Point(0, 0), element.VisualOffset);
            Assert.AreEqual(200, element.ActualWidth);
            Assert.AreEqual(100, element.ActualHeight);

            element.HorizontalAlignment = HorizontalAlignment.Center;
            element.VerticalAlignment = VerticalAlignment.Bottom;
            element.Arrange(new Rect(300, 200));
            Assert.AreEqual(new Size(300, 200), element.LastAvailableSize);
            Assert.AreEqual(new Size(200, 100), element.VisualSize);
            Assert.AreEqual(new Point(50, 100), element.VisualOffset);
            Assert.AreEqual(200, element.ActualWidth);
            Assert.AreEqual(100, element.ActualHeight);

            element.HorizontalAlignment = HorizontalAlignment.Right;
            element.VerticalAlignment = VerticalAlignment.Center;
            element.Arrange(new Rect(300, 200));
            Assert.AreEqual(new Size(300, 200), element.LastAvailableSize);
            Assert.AreEqual(new Size(200, 100), element.VisualSize);
            Assert.AreEqual(new Point(100, 50), element.VisualOffset);
            Assert.AreEqual(200, element.ActualWidth);
            Assert.AreEqual(100, element.ActualHeight);

            element.HorizontalAlignment = HorizontalAlignment.Stretch;
            element.VerticalAlignment = VerticalAlignment.Stretch;
            element.Arrange(new Rect(300, 200));
            Assert.AreEqual(new Size(300, 200), element.LastAvailableSize);
            Assert.AreEqual(new Size(300, 200), element.VisualSize);
            Assert.AreEqual(new Point(0, 0), element.VisualOffset);
            Assert.AreEqual(300, element.ActualWidth);
            Assert.AreEqual(200, element.ActualHeight);

            element.ArrangeSize = new Size(200, 100);
            element.InvalidateArrange();

            element.HorizontalAlignment = HorizontalAlignment.Stretch;
            element.VerticalAlignment = VerticalAlignment.Stretch;
            element.Arrange(new Rect(300, 200));
            Assert.AreEqual(new Size(300, 200), element.LastAvailableSize);
            Assert.AreEqual(new Size(200, 100), element.VisualSize);
            Assert.AreEqual(new Point(50, 50), element.VisualOffset);
            Assert.AreEqual(200, element.ActualWidth);
            Assert.AreEqual(100, element.ActualHeight);
        }
예제 #7
0
        public void MeasureCoreTest()
        {
            LayoutTestElement element = new LayoutTestElement { MeasureSize = new Size(200, 100) };

            element.Measure(new Size(200, 100));
            Assert.AreEqual(new Size(200, 100), element.DesiredSize);

            element.Measure(Size.Infinity);
            Assert.AreEqual(new Size(200, 100), element.DesiredSize);

            element.Measure(Size.Zero);
            Assert.AreEqual(new Size(200, 100), element.DesiredSize);

            element.Margin = new Thickness(10, 20, 30, 40);
            element.Measure(new Size(200, 100));
            Assert.AreEqual(new Size(240, 160), element.DesiredSize);

            element.Measure(Size.Infinity);
            Assert.AreEqual(new Size(240, 160), element.DesiredSize);

            element.Measure(Size.Zero);
            Assert.AreEqual(new Size(240, 160), element.DesiredSize);

            element.Width = 400;
            element.Height = 300;
            element.Measure(new Size(200, 100));
            Assert.AreEqual(new Size(440, 360), element.DesiredSize);

            element.Measure(Size.Infinity);
            Assert.AreEqual(new Size(440, 360), element.DesiredSize);

            element.Measure(Size.Zero);
            Assert.AreEqual(new Size(440, 360), element.DesiredSize);
        }
예제 #8
0
        public void ArrangeCoreMarginTest()
        {
            LayoutTestElement element = new LayoutTestElement { MeasureSize = new Size(200, 100), Margin = new Thickness(10, 20, 30, 40) };

            element.Arrange(new Rect(200, 100));
            Assert.AreEqual(new Size(160, 40), element.LastAvailableSize);
            Assert.AreEqual(new Size(160, 40), element.VisualSize);
            Assert.AreEqual(new Point(10, 20), element.VisualOffset);
            Assert.AreEqual(160, element.ActualWidth);
            Assert.AreEqual(40, element.ActualHeight);

            element.Width = 200;
            element.Height = 100;
            element.InvalidateArrange();
            element.Arrange(new Rect(200, 100));
            Assert.AreEqual(new Size(200, 100), element.LastAvailableSize);
            Assert.AreEqual(new Size(200, 100), element.VisualSize);
            Assert.AreEqual(new Point(-10, -10), element.VisualOffset);
            Assert.AreEqual(200, element.ActualWidth);
            Assert.AreEqual(100, element.ActualHeight);

            element.Width = Double.NaN;
            element.Height = Double.NaN;
            element.Arrange(new Rect(240, 160));
            Assert.AreEqual(new Size(200, 100), element.LastAvailableSize);
            Assert.AreEqual(new Size(200, 100), element.VisualSize);
            Assert.AreEqual(new Point(10, 20), element.VisualOffset);
            Assert.AreEqual(200, element.ActualWidth);
            Assert.AreEqual(100, element.ActualHeight);

            element.HorizontalAlignment = HorizontalAlignment.Left;
            element.VerticalAlignment = VerticalAlignment.Top;
            element.Arrange(new Rect(340, 260));
            Assert.AreEqual(new Size(300, 200), element.LastAvailableSize);
            Assert.AreEqual(new Size(200, 100), element.VisualSize);
            Assert.AreEqual(new Point(10, 20), element.VisualOffset);
            Assert.AreEqual(200, element.ActualWidth);
            Assert.AreEqual(100, element.ActualHeight);

            element.HorizontalAlignment = HorizontalAlignment.Center;
            element.VerticalAlignment = VerticalAlignment.Bottom;
            element.Arrange(new Rect(340, 260));
            Assert.AreEqual(new Size(300, 200), element.LastAvailableSize);
            Assert.AreEqual(new Size(200, 100), element.VisualSize);
            Assert.AreEqual(new Point(60, 120), element.VisualOffset);
            Assert.AreEqual(200, element.ActualWidth);
            Assert.AreEqual(100, element.ActualHeight);

            element.HorizontalAlignment = HorizontalAlignment.Right;
            element.VerticalAlignment = VerticalAlignment.Center;
            element.Arrange(new Rect(340, 260));
            Assert.AreEqual(new Size(300, 200), element.LastAvailableSize);
            Assert.AreEqual(new Size(200, 100), element.VisualSize);
            Assert.AreEqual(new Point(110, 70), element.VisualOffset);
            Assert.AreEqual(200, element.ActualWidth);
            Assert.AreEqual(100, element.ActualHeight);

            element.HorizontalAlignment = HorizontalAlignment.Stretch;
            element.VerticalAlignment = VerticalAlignment.Stretch;
            element.Arrange(new Rect(340, 260));
            Assert.AreEqual(new Size(300, 200), element.LastAvailableSize);
            Assert.AreEqual(new Size(300, 200), element.VisualSize);
            Assert.AreEqual(new Point(10, 20), element.VisualOffset);
            Assert.AreEqual(300, element.ActualWidth);
            Assert.AreEqual(200, element.ActualHeight);

            element.ArrangeSize = new Size(200, 100);
            element.InvalidateArrange();

            element.HorizontalAlignment = HorizontalAlignment.Stretch;
            element.VerticalAlignment = VerticalAlignment.Stretch;
            element.Arrange(new Rect(340, 260));
            Assert.AreEqual(new Size(300, 200), element.LastAvailableSize);
            Assert.AreEqual(new Size(200, 100), element.VisualSize);
            Assert.AreEqual(new Point(60, 70), element.VisualOffset);
            Assert.AreEqual(200, element.ActualWidth);
            Assert.AreEqual(100, element.ActualHeight);
        }