From 9bb1062dc8d04d7a0c11f6adfbbfb5b8a6813a72 Mon Sep 17 00:00:00 2001 From: jogibear9988 Date: Mon, 10 Nov 2014 20:36:08 +0100 Subject: [PATCH] A few Unit-tests for INamescope (more to follow...) --- .../WpfDesign.Designer/Project/ModelTools.cs | 214 +++++++++--------- .../WpfDesign.Designer/Project/UIHelpers.cs | 4 +- .../Tests/WpfDesign.Tests.csproj | 9 + .../Tests/XamlDom/ExampleControl.cs | 23 ++ .../Tests/XamlDom/NamescopeTest.cs | 132 +++++++++++ .../XamlDom/NamscopeTestUsercontrol.xaml | 13 ++ .../XamlDom/NamscopeTestUsercontrol.xaml.cs | 28 +++ 7 files changed, 314 insertions(+), 109 deletions(-) create mode 100644 src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/XamlDom/ExampleControl.cs create mode 100644 src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/XamlDom/NamescopeTest.cs create mode 100644 src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/XamlDom/NamscopeTestUsercontrol.xaml create mode 100644 src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/XamlDom/NamscopeTestUsercontrol.xaml.cs diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/ModelTools.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/ModelTools.cs index d37f0845df..b7099f6144 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/ModelTools.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/ModelTools.cs @@ -119,7 +119,7 @@ namespace ICSharpCode.WpfDesign.Designer } } - internal static void CreateVisualTree(this UIElement element) + public static void CreateVisualTree(this UIElement element) { try { @@ -227,13 +227,13 @@ namespace ICSharpCode.WpfDesign.Designer { var itemPos = new ItemPos() {DesignItem = designItem}; - var pos = operation.CurrentContainerBehavior.GetPosition(operation, designItem); + var pos = operation.CurrentContainerBehavior.GetPosition(operation, designItem); itemPos.Xmin = pos.X; itemPos.Xmax = pos.X + pos.Width; itemPos.Ymin = pos.Y; itemPos.Ymax = pos.Y + pos.Height; - return itemPos; + return itemPos; } public static void WrapItemsNewContainer(IEnumerable items, Type containerType) @@ -252,7 +252,7 @@ namespace ICSharpCode.WpfDesign.Designer if (placement == null) return; - var operation = PlacementOperation.Start(items.ToList(), PlacementType.Move); + var operation = PlacementOperation.Start(items.ToList(), PlacementType.Move); var newInstance = Activator.CreateInstance(containerType); DesignItem newPanel = _context.Services.Component.RegisterComponentForDesigner(newInstance); @@ -261,7 +261,7 @@ namespace ICSharpCode.WpfDesign.Designer List itemList = new List(); foreach (var item in collection) { - itemList.Add(GetItemPos(operation, item)); + itemList.Add(GetItemPos(operation, item)); //var pos = placement.GetPosition(null, item); if (container.Component is Canvas) { item.Properties.GetAttachedProperty(Canvas.RightProperty).Reset(); @@ -297,7 +297,7 @@ namespace ICSharpCode.WpfDesign.Designer item.DesignItem.Properties.GetAttachedProperty(Canvas.TopProperty).SetValue(item.Ymin - ymin); } - newPanel.ContentProperty.CollectionElements.Add(item.DesignItem); + newPanel.ContentProperty.CollectionElements.Add(item.DesignItem); } else if (newPanel.Component is Grid) { Thickness thickness = new Thickness(0); @@ -319,21 +319,21 @@ namespace ICSharpCode.WpfDesign.Designer item.DesignItem.Properties.GetProperty(FrameworkElement.MarginProperty).SetValue(thickness); - newPanel.ContentProperty.CollectionElements.Add(item.DesignItem); + newPanel.ContentProperty.CollectionElements.Add(item.DesignItem); } else if (newPanel.Component is Viewbox) { - newPanel.ContentProperty.SetValue(item.DesignItem); + newPanel.ContentProperty.SetValue(item.DesignItem); } } - PlacementOperation operation2 = PlacementOperation.TryStartInsertNewComponents( + PlacementOperation operation2 = PlacementOperation.TryStartInsertNewComponents( container, new[] { newPanel }, new[] { new Rect(xmin, ymin, xmax - xmin, ymax - ymin).Round() }, PlacementType.AddItem ); - operation2.Commit(); + operation2.Commit(); operation.Commit(); @@ -355,8 +355,8 @@ namespace ICSharpCode.WpfDesign.Designer if (placement == null) return; - var operation = PlacementOperation.Start(items.ToList(), PlacementType.Move); - + var operation = PlacementOperation.Start(items.ToList(), PlacementType.Move); + //var changeGroup = container.OpenGroup("Arrange Elements"); List itemList = new List(); @@ -392,19 +392,19 @@ namespace ICSharpCode.WpfDesign.Designer } else if (container.Component is Grid) { - if ((HorizontalAlignment)item.Properties.GetProperty(FrameworkElement.HorizontalAlignmentProperty).ValueOnInstance != HorizontalAlignment.Right) - { - var margin = (Thickness)item.Properties.GetProperty(FrameworkElement.MarginProperty).ValueOnInstance; - margin.Left = xmin; - item.Properties.GetProperty(FrameworkElement.MarginProperty).SetValue(margin); - } - else - { - var pos = (double)((Panel)item.Parent.Component).ActualWidth - (xmin + (double)((FrameworkElement)item.Component).ActualWidth); - var margin = (Thickness)item.Properties.GetProperty(FrameworkElement.MarginProperty).ValueOnInstance; - margin.Right = pos; - item.Properties.GetProperty(FrameworkElement.MarginProperty).SetValue(margin); - } + if ((HorizontalAlignment)item.Properties.GetProperty(FrameworkElement.HorizontalAlignmentProperty).ValueOnInstance != HorizontalAlignment.Right) + { + var margin = (Thickness)item.Properties.GetProperty(FrameworkElement.MarginProperty).ValueOnInstance; + margin.Left = xmin; + item.Properties.GetProperty(FrameworkElement.MarginProperty).SetValue(margin); + } + else + { + var pos = (double)((Panel)item.Parent.Component).ActualWidth - (xmin + (double)((FrameworkElement)item.Component).ActualWidth); + var margin = (Thickness)item.Properties.GetProperty(FrameworkElement.MarginProperty).ValueOnInstance; + margin.Right = pos; + item.Properties.GetProperty(FrameworkElement.MarginProperty).SetValue(margin); + } } } break; @@ -414,34 +414,34 @@ namespace ICSharpCode.WpfDesign.Designer { if (!item.Properties.GetAttachedProperty(Canvas.RightProperty).IsSet) { - if (!item.Properties.GetAttachedProperty(Canvas.RightProperty).IsSet) - { - item.Properties.GetAttachedProperty(Canvas.LeftProperty).SetValue(mpos - (((FrameworkElement)item.Component).ActualWidth) / 2); - } - else - { - var pp = mpos - (((FrameworkElement)item.Component).ActualWidth) / 2; - var pos = (double)((Panel)item.Parent.Component).ActualWidth - pp - (((FrameworkElement)item.Component).ActualWidth); - item.Properties.GetAttachedProperty(Canvas.RightProperty).SetValue(pos); - } - } + if (!item.Properties.GetAttachedProperty(Canvas.RightProperty).IsSet) + { + item.Properties.GetAttachedProperty(Canvas.LeftProperty).SetValue(mpos - (((FrameworkElement)item.Component).ActualWidth) / 2); + } + else + { + var pp = mpos - (((FrameworkElement)item.Component).ActualWidth) / 2; + var pos = (double)((Panel)item.Parent.Component).ActualWidth - pp - (((FrameworkElement)item.Component).ActualWidth); + item.Properties.GetAttachedProperty(Canvas.RightProperty).SetValue(pos); + } + } } else if (container.Component is Grid) { - if ((HorizontalAlignment)item.Properties.GetProperty(FrameworkElement.HorizontalAlignmentProperty).ValueOnInstance != HorizontalAlignment.Right) - { - var margin = (Thickness)item.Properties.GetProperty(FrameworkElement.MarginProperty).ValueOnInstance; - margin.Left = mpos - (((FrameworkElement)item.Component).ActualWidth) / 2; - item.Properties.GetProperty(FrameworkElement.MarginProperty).SetValue(margin); - } - else - { - var pp = mpos - (((FrameworkElement)item.Component).ActualWidth) / 2; - var pos = (double)((Panel)item.Parent.Component).ActualWidth - pp - (((FrameworkElement)item.Component).ActualWidth); - var margin = (Thickness)item.Properties.GetProperty(FrameworkElement.MarginProperty).ValueOnInstance; - margin.Right = pos; - item.Properties.GetProperty(FrameworkElement.MarginProperty).SetValue(margin); - } + if ((HorizontalAlignment)item.Properties.GetProperty(FrameworkElement.HorizontalAlignmentProperty).ValueOnInstance != HorizontalAlignment.Right) + { + var margin = (Thickness)item.Properties.GetProperty(FrameworkElement.MarginProperty).ValueOnInstance; + margin.Left = mpos - (((FrameworkElement)item.Component).ActualWidth) / 2; + item.Properties.GetProperty(FrameworkElement.MarginProperty).SetValue(margin); + } + else + { + var pp = mpos - (((FrameworkElement)item.Component).ActualWidth) / 2; + var pos = (double)((Panel)item.Parent.Component).ActualWidth - pp - (((FrameworkElement)item.Component).ActualWidth); + var margin = (Thickness)item.Properties.GetProperty(FrameworkElement.MarginProperty).ValueOnInstance; + margin.Right = pos; + item.Properties.GetProperty(FrameworkElement.MarginProperty).SetValue(margin); + } } } break; @@ -462,20 +462,20 @@ namespace ICSharpCode.WpfDesign.Designer } else if (container.Component is Grid) { - if ((HorizontalAlignment)item.Properties.GetProperty(FrameworkElement.HorizontalAlignmentProperty).ValueOnInstance != HorizontalAlignment.Right) - { - var pos = xmax - (double)((FrameworkElement)item.Component).ActualWidth; - var margin = (Thickness)item.Properties.GetProperty(FrameworkElement.MarginProperty).ValueOnInstance; - margin.Left = pos; - item.Properties.GetProperty(FrameworkElement.MarginProperty).SetValue(margin); - } - else - { - var pos = (double)((Panel)item.Parent.Component).ActualWidth - xmax; - var margin = (Thickness)item.Properties.GetProperty(FrameworkElement.MarginProperty).ValueOnInstance; - margin.Right = pos; - item.Properties.GetProperty(FrameworkElement.MarginProperty).SetValue(margin); - } + if ((HorizontalAlignment)item.Properties.GetProperty(FrameworkElement.HorizontalAlignmentProperty).ValueOnInstance != HorizontalAlignment.Right) + { + var pos = xmax - (double)((FrameworkElement)item.Component).ActualWidth; + var margin = (Thickness)item.Properties.GetProperty(FrameworkElement.MarginProperty).ValueOnInstance; + margin.Left = pos; + item.Properties.GetProperty(FrameworkElement.MarginProperty).SetValue(margin); + } + else + { + var pos = (double)((Panel)item.Parent.Component).ActualWidth - xmax; + var margin = (Thickness)item.Properties.GetProperty(FrameworkElement.MarginProperty).ValueOnInstance; + margin.Right = pos; + item.Properties.GetProperty(FrameworkElement.MarginProperty).SetValue(margin); + } } } break; @@ -495,20 +495,20 @@ namespace ICSharpCode.WpfDesign.Designer } else if (container.Component is Grid) { - if ((VerticalAlignment)item.Properties.GetProperty(FrameworkElement.VerticalAlignmentProperty).ValueOnInstance != VerticalAlignment.Bottom) - { - item.Properties.GetAttachedProperty(Canvas.TopProperty).SetValue(ymin); - var margin = (Thickness)item.Properties.GetProperty(FrameworkElement.MarginProperty).ValueOnInstance; - margin.Top = ymin; - item.Properties.GetProperty(FrameworkElement.MarginProperty).SetValue(margin); - } - else - { - var pos = (double)((Panel)item.Parent.Component).ActualHeight - (ymin + (double)((FrameworkElement)item.Component).ActualHeight); - var margin = (Thickness)item.Properties.GetProperty(FrameworkElement.MarginProperty).ValueOnInstance; - margin.Bottom = pos; - item.Properties.GetProperty(FrameworkElement.MarginProperty).SetValue(margin); - } + if ((VerticalAlignment)item.Properties.GetProperty(FrameworkElement.VerticalAlignmentProperty).ValueOnInstance != VerticalAlignment.Bottom) + { + item.Properties.GetAttachedProperty(Canvas.TopProperty).SetValue(ymin); + var margin = (Thickness)item.Properties.GetProperty(FrameworkElement.MarginProperty).ValueOnInstance; + margin.Top = ymin; + item.Properties.GetProperty(FrameworkElement.MarginProperty).SetValue(margin); + } + else + { + var pos = (double)((Panel)item.Parent.Component).ActualHeight - (ymin + (double)((FrameworkElement)item.Component).ActualHeight); + var margin = (Thickness)item.Properties.GetProperty(FrameworkElement.MarginProperty).ValueOnInstance; + margin.Bottom = pos; + item.Properties.GetProperty(FrameworkElement.MarginProperty).SetValue(margin); + } } } break; @@ -529,20 +529,20 @@ namespace ICSharpCode.WpfDesign.Designer } else if (container.Component is Grid) { - if ((VerticalAlignment)item.Properties.GetProperty(FrameworkElement.VerticalAlignmentProperty).ValueOnInstance != VerticalAlignment.Bottom) - { - var margin = (Thickness)item.Properties.GetProperty(FrameworkElement.MarginProperty).ValueOnInstance; - margin.Top = ympos - (((FrameworkElement)item.Component).ActualHeight) / 2; - item.Properties.GetProperty(FrameworkElement.MarginProperty).SetValue(margin); - } - else - { - var pp = mpos - (((FrameworkElement)item.Component).ActualHeight) / 2; - var pos = (double)((Panel)item.Parent.Component).ActualHeight - pp - (((FrameworkElement)item.Component).ActualHeight); - var margin = (Thickness)item.Properties.GetProperty(FrameworkElement.MarginProperty).ValueOnInstance; - margin.Bottom = pos; - item.Properties.GetProperty(FrameworkElement.MarginProperty).SetValue(margin); - } + if ((VerticalAlignment)item.Properties.GetProperty(FrameworkElement.VerticalAlignmentProperty).ValueOnInstance != VerticalAlignment.Bottom) + { + var margin = (Thickness)item.Properties.GetProperty(FrameworkElement.MarginProperty).ValueOnInstance; + margin.Top = ympos - (((FrameworkElement)item.Component).ActualHeight) / 2; + item.Properties.GetProperty(FrameworkElement.MarginProperty).SetValue(margin); + } + else + { + var pp = mpos - (((FrameworkElement)item.Component).ActualHeight) / 2; + var pos = (double)((Panel)item.Parent.Component).ActualHeight - pp - (((FrameworkElement)item.Component).ActualHeight); + var margin = (Thickness)item.Properties.GetProperty(FrameworkElement.MarginProperty).ValueOnInstance; + margin.Bottom = pos; + item.Properties.GetProperty(FrameworkElement.MarginProperty).SetValue(margin); + } } } break; @@ -563,27 +563,27 @@ namespace ICSharpCode.WpfDesign.Designer } else if (container.Component is Grid) { - if ((VerticalAlignment)item.Properties.GetProperty(FrameworkElement.VerticalAlignmentProperty).ValueOnInstance != VerticalAlignment.Bottom) - { - var pos = ymax - (double)((FrameworkElement)item.Component).ActualHeight; - var margin = (Thickness)item.Properties.GetProperty(FrameworkElement.MarginProperty).ValueOnInstance; - margin.Top = pos; - item.Properties.GetProperty(FrameworkElement.MarginProperty).SetValue(margin); - } - else - { - var pos = (double)((Panel)item.Parent.Component).ActualHeight - ymax; - var margin = (Thickness)item.Properties.GetProperty(FrameworkElement.MarginProperty).ValueOnInstance; - margin.Bottom = pos; - item.Properties.GetProperty(FrameworkElement.MarginProperty).SetValue(margin); - } + if ((VerticalAlignment)item.Properties.GetProperty(FrameworkElement.VerticalAlignmentProperty).ValueOnInstance != VerticalAlignment.Bottom) + { + var pos = ymax - (double)((FrameworkElement)item.Component).ActualHeight; + var margin = (Thickness)item.Properties.GetProperty(FrameworkElement.MarginProperty).ValueOnInstance; + margin.Top = pos; + item.Properties.GetProperty(FrameworkElement.MarginProperty).SetValue(margin); + } + else + { + var pos = (double)((Panel)item.Parent.Component).ActualHeight - ymax; + var margin = (Thickness)item.Properties.GetProperty(FrameworkElement.MarginProperty).ValueOnInstance; + margin.Bottom = pos; + item.Properties.GetProperty(FrameworkElement.MarginProperty).SetValue(margin); + } } } break; } } - operation.Commit(); + operation.Commit(); } } } diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/UIHelpers.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/UIHelpers.cs index 53c6d19d3d..3d7452f045 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/UIHelpers.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/UIHelpers.cs @@ -25,7 +25,7 @@ using System.Windows.Media; namespace ICSharpCode.WpfDesign.Designer { - static class UIHelpers + public static class UIHelpers { public static DependencyObject GetParentObject(this DependencyObject child) { @@ -85,7 +85,7 @@ namespace ICSharpCode.WpfDesign.Designer return null; } - public static T TryFindChild(DependencyObject parent, string childName) where T : DependencyObject + public static T TryFindChild(this DependencyObject parent, string childName) where T : DependencyObject { if (parent == null) return null; T foundChild = null; diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/WpfDesign.Tests.csproj b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/WpfDesign.Tests.csproj index 780ad08b4f..a18897b374 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/WpfDesign.Tests.csproj +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/WpfDesign.Tests.csproj @@ -75,8 +75,13 @@ + + + + NamscopeTestUsercontrol.xaml + @@ -106,5 +111,9 @@ Designer + + Designer + MSBuild:Compile + \ No newline at end of file diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/XamlDom/ExampleControl.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/XamlDom/ExampleControl.cs new file mode 100644 index 0000000000..7a1822a432 --- /dev/null +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/XamlDom/ExampleControl.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; + +namespace ICSharpCode.WpfDesign.Tests.XamlDom +{ + public class ExampleControl : Control + { + public object Property1 + { + get { return (object)GetValue(Property1Property); } + set { SetValue(Property1Property, value); } + } + + public static readonly DependencyProperty Property1Property = + DependencyProperty.Register("Property1", typeof(object), typeof(ExampleControl), new PropertyMetadata(null)); + + } +} diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/XamlDom/NamescopeTest.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/XamlDom/NamescopeTest.cs new file mode 100644 index 0000000000..8af32b28f7 --- /dev/null +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/XamlDom/NamescopeTest.cs @@ -0,0 +1,132 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Markup; +using System.Xml; +using ICSharpCode.WpfDesign.XamlDom; +using NUnit.Framework; +using ICSharpCode.WpfDesign.Designer; + +namespace ICSharpCode.WpfDesign.Tests.XamlDom +{ + [TestFixture] + public class NamescopeTest : TestHelper + { + /// + /// NamescopeTest 1 + /// + [Test] + public void NamescopeTest1() + { + var xaml= @" + + +