public void Should_Track_Bounds() { using (UnitTestApplication.Start(TestServices.StyledWindow)) { var target = new BoundsTracker(); var control = default(Rectangle); var tree = new Decorator { Padding = new Thickness(10), Child = new Decorator { Padding = new Thickness(5), Child = control = new Rectangle { Width = 15, Height = 15, }, } }; var context = new DrawingContext(Mock.Of<IDrawingContextImpl>()); tree.Measure(Size.Infinity); tree.Arrange(new Rect(0, 0, 100, 100)); context.Render(tree); var track = target.Track(control); var results = new List<TransformedBounds?>(); track.Subscribe(results.Add); Assert.Equal(new Rect(0, 0, 15, 15), results[0].Value.Bounds); Assert.Equal(Matrix.CreateTranslation(42, 42), results[0].Value.Transform); } }
public void GetVisualsAt_Should_Not_Find_Invisible_Controls_At_Point() { using (var application = UnitTestApplication.Start(new TestServices(renderInterface: new MockRenderInterface()))) { var container = new Decorator { Width = 200, Height = 200, Child = new Border { Width = 100, Height = 100, HorizontalAlignment = HorizontalAlignment.Center, VerticalAlignment = VerticalAlignment.Center, IsVisible = false, Child = new Border { HorizontalAlignment = HorizontalAlignment.Stretch, VerticalAlignment = VerticalAlignment.Stretch, } } }; container.Measure(Size.Infinity); container.Arrange(new Rect(container.DesiredSize)); var context = new DrawingContext(Mock.Of<IDrawingContextImpl>()); context.Render(container); var result = container.GetVisualsAt(new Point(100, 100)); Assert.Equal(new[] { container }, result); } }
public void InputHitTest_Should_Not_Find_Control_Outside_Point() { using (UnitTestApplication.Start(new TestServices(renderInterface: new MockRenderInterface()))) { var container = new Decorator { Width = 200, Height = 200, Child = new Border { Width = 100, Height = 100, HorizontalAlignment = HorizontalAlignment.Center, VerticalAlignment = VerticalAlignment.Center } }; container.Measure(Size.Infinity); container.Arrange(new Rect(container.DesiredSize)); var context = new DrawingContext(Mock.Of<IDrawingContextImpl>()); context.Render(container); var result = container.InputHitTest(new Point(10, 10)); Assert.Equal(container, result); } }
public void LinearGradientBrush_RedBlue_Vertical_Fill() { Decorator target = new Decorator { Padding = new Thickness(8), Width = 200, Height = 200, Child = new Border { Background = new LinearGradientBrush { StartPoint = new RelativePoint(0.5, 0, RelativeUnit.Relative), EndPoint = new RelativePoint(0.5, 1, RelativeUnit.Relative), GradientStops = { new GradientStop { Color = Colors.Red, Offset = 0 }, new GradientStop { Color = Colors.Blue, Offset = 1 } } } } }; RenderToFile(target); CompareImages(); }
public void Polyline_10px_Stroke_PenLineJoin() { var polylinePoints = new Point[] { new Point(0, 0), new Point(5, 0), new Point(6, -2), new Point(7, 3), new Point(8, -3), new Point(9, 1), new Point(10, 0), new Point(15, 0) }; Decorator target = new Decorator { Padding = new Thickness(8), Width = 400, Height = 200, Child = new Polyline { Stroke = Brushes.Brown, Points = polylinePoints, Stretch = Stretch.Uniform, StrokeJoin = PenLineJoin.Round, StrokeStartLineCap = PenLineCap.Round, StrokeEndLineCap = PenLineCap.Round, StrokeThickness = 10 } }; RenderToFile(target); CompareImages(); }
public void Setter_Should_Materialize_Template_To_Property() { var control = new Decorator(); var template = new FuncTemplate<Canvas>(() => new Canvas()); var style = Mock.Of<IStyle>(); var setter = new Setter(Decorator.ChildProperty, template); setter.Apply(style, control, null); Assert.IsType<Canvas>(control.Child); }
public void Materializes_Template_Should_Be_NameScope() { var control = new Decorator(); var template = new FuncTemplate<Canvas>(() => new Canvas()); var style = Mock.Of<IStyle>(); var setter = new Setter(Decorator.ChildProperty, template); setter.Apply(style, control, null); Assert.NotNull(NameScope.GetNameScope((Control)control.Child)); }
public void Margin_Should_Be_Included_In_DesiredSize() { var decorator = new Decorator { Width = 100, Height = 100, Margin = new Thickness(8), }; decorator.Measure(Size.Infinity); Assert.Equal(new Size(116, 116), decorator.DesiredSize); }
public void Border_Fill() { Decorator target = new Decorator { Padding = new Thickness(8), Width = 200, Height = 200, Child = new Border { Background = Brushes.Red, } }; RenderToFile(target); CompareImages(); }
public void Circle_1px_Stroke() { Decorator target = new Decorator { Padding = new Thickness(8), Width = 200, Height = 200, Child = new Ellipse { Stroke = Brushes.Black, StrokeThickness = 1, } }; RenderToFile(target); CompareImages(); }
public void Rectangle_2px_Stroke() { Decorator target = new Decorator { Padding = new Thickness(8), Width = 200, Height = 200, Child = new Rectangle { Stroke = Brushes.Black, StrokeThickness = 2, } }; RenderToFile(target); CompareImages(); }
public void Border_2px_Border() { Decorator target = new Decorator { Padding = new Thickness(8), Width = 200, Height = 200, Child = new Border { BorderBrush = Brushes.Black, BorderThickness = 2, } }; RenderToFile(target); CompareImages(); }
public void Tapped_Should_Be_Raised_Even_When_PointerPressed_Handled() { Border border = new Border(); var decorator = new Decorator { Child = border }; var result = new List<string>(); border.AddHandler(Border.PointerPressedEvent, (s, e) => e.Handled = true); decorator.AddHandler(Gestures.TappedEvent, (s, e) => result.Add("dt")); border.AddHandler(Gestures.TappedEvent, (s, e) => result.Add("bt")); border.RaiseEvent(new PointerPressedEventArgs()); border.RaiseEvent(new PointerReleasedEventArgs()); Assert.Equal(new[] { "bt", "dt" }, result); }
public void DataContext_Binding_Should_Produce_Correct_Results() { var root = new Decorator { DataContext = new { Foo = "bar" }, }; var child = new Control(); var dataContextBinding = new Binding("Foo"); var values = new List<object>(); child.GetObservable(Border.DataContextProperty).Subscribe(x => values.Add(x)); child.Bind(ContentControl.DataContextProperty, dataContextBinding); root.Child = child; Assert.Equal(new[] { null, "bar" }, values); }
public void Line_1px_Stroke_Vertical() { Decorator target = new Decorator { Width = 200, Height = 200, Child = new Line { Stroke = Brushes.Black, StrokeThickness = 1, StartPoint = new Point(100, 200), EndPoint = new Point(100, 0) } }; RenderToFile(target); CompareImages(); }
public void Line_Relative() { Decorator target = new Decorator { Width = 200, Height = 200, Child = new Path { Stroke = Brushes.Red, StrokeThickness = 1, HorizontalAlignment = HorizontalAlignment.Center, VerticalAlignment = VerticalAlignment.Center, Data = StreamGeometry.Parse("M10,190 l190,-190 M0,0M200,200"), } }; RenderToFile(target); CompareImages(); }
public void FindStyleResource_Should_Find_Correct_Resource() { Border target; var tree = new Decorator { Styles = new Styles { new Style { Resources = new Dictionary<string, object> { { "Foo", "foo resource" }, { "Bar", "overridden" }, } } }, Child = target = new Border { Styles = new Styles { new Style { Resources = new Dictionary<string, object> { { "Bar", "again overridden" }, } }, new Style { Resources = new Dictionary<string, object> { { "Bar", "bar resource" }, } } } } }; Assert.Equal("foo resource", target.FindStyleResource("Foo")); Assert.Equal("bar resource", target.FindStyleResource("Bar")); }
public void Path_100px_Triangle_Centered() { Decorator target = new Decorator { Width = 200, Height = 200, Child = new Path { Fill = Brushes.Gray, Stroke = Brushes.Red, StrokeThickness = 2, HorizontalAlignment = HorizontalAlignment.Center, VerticalAlignment = VerticalAlignment.Center, Data = StreamGeometry.Parse("M 0,100 L 100,100 50,0 Z"), } }; RenderToFile(target); CompareImages(); }
public void DataContext_Binding_Should_Track_Parent() { var parent = new Decorator { DataContext = new { Foo = "foo" }, }; var child = new Control(); var binding = new Binding { Path = "Foo", }; child.Bind(Control.DataContextProperty, binding); Assert.Null(child.DataContext); parent.Child = child; Assert.Equal("foo", child.DataContext); }
public void Polygon_NonUniformFill() { Decorator target = new Decorator { Padding = new Thickness(8), Width = 400, Height = 200, Child = new Polygon { Stroke = Brushes.DarkBlue, Stretch = Stretch.Fill, Fill = Brushes.Violet, Points = new[] { new Point(5, 0), new Point(8, 8), new Point(0, 3), new Point(10, 3), new Point(2, 8) }, StrokeThickness = 5, } }; RenderToFile(target); CompareImages(); }
public void Wrapping_NoWrap() { Decorator target = new Decorator { Padding = new Thickness(8), Width = 200, Height = 200, Child = new TextBlock { Background = Brushes.Red, FontSize = 12, Foreground = Brushes.Black, Text = "Neque porro quisquam est qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit", VerticalAlignment = VerticalAlignment.Top, TextWrapping = TextWrapping.NoWrap, } }; RenderToFile(target); CompareImages(); }
public void Image_Stretch_Fill() { Decorator target = new Decorator { Padding = new Thickness(20, 8), Width = 200, Height = 200, Child = new Border { Background = Brushes.Red, Child = new Image { Source = _bitmap, Stretch = Stretch.Fill, } } }; RenderToFile(target); CompareImages(); }
public void Path_Tick_Scaled() { Decorator target = new Decorator { Width = 200, Height = 200, Child = new Path { Fill = Brushes.Gray, Stroke = Brushes.Red, StrokeThickness = 2, Stretch = Stretch.Uniform, HorizontalAlignment = HorizontalAlignment.Center, VerticalAlignment = VerticalAlignment.Center, Data = StreamGeometry.Parse("M 1145.607177734375,430 C1145.607177734375,430 1141.449951171875,435.0772705078125 1141.449951171875,435.0772705078125 1141.449951171875,435.0772705078125 1139.232177734375,433.0999755859375 1139.232177734375,433.0999755859375 1139.232177734375,433.0999755859375 1138,434.5538330078125 1138,434.5538330078125 1138,434.5538330078125 1141.482177734375,438 1141.482177734375,438 1141.482177734375,438 1141.96875,437.9375 1141.96875,437.9375 1141.96875,437.9375 1147,431.34619140625 1147,431.34619140625 1147,431.34619140625 1145.607177734375,430 1145.607177734375,430 z"), } }; RenderToFile(target); CompareImages(); }
public void DataContext_Binding_Should_Use_Parent_DataContext() { var parentDataContext = Mock.Of<IHeadered>(x => x.Header == (object)"Foo"); var parent = new Decorator { Child = new Control(), DataContext = parentDataContext, }; var binding = new Binding { Path = "Header", }; parent.Child.Bind(Control.DataContextProperty, binding); Assert.Equal("Foo", parent.Child.DataContext); parentDataContext = Mock.Of<IHeadered>(x => x.Header == (object)"Bar"); parent.DataContext = parentDataContext; Assert.Equal("Bar", parent.Child.DataContext); }
public void ImageBrush_NoStretch_NoTile_Alignment_Center() { Decorator target = new Decorator { Padding = new Thickness(8), Width = 200, Height = 200, Child = new Rectangle { Fill = new ImageBrush { Stretch = Stretch.None, TileMode = TileMode.None, AlignmentX = AlignmentX.Center, AlignmentY = AlignmentY.Center, Source = new Bitmap(BitmapPath), } } }; RenderToFile(target); CompareImages(); }
public void VisualBrush_NoStretch_NoTile_Alignment_TopLeft() { Decorator target = new Decorator { Padding = new Thickness(8), Width = 200, Height = 200, Child = new Rectangle { Fill = new VisualBrush { Stretch = Stretch.None, TileMode = TileMode.None, AlignmentX = AlignmentX.Left, AlignmentY = AlignmentY.Top, Visual = Visual, } } }; RenderToFile(target); CompareImages(); }
public void DoubleTapped_Should_Follow_Pointer_Pressed_Released_Pressed() { Border border = new Border(); var decorator = new Decorator { Child = border }; var result = new List<string>(); decorator.AddHandler(Border.PointerPressedEvent, (s, e) => result.Add("dp")); decorator.AddHandler(Border.PointerReleasedEvent, (s, e) => result.Add("dr")); decorator.AddHandler(Gestures.TappedEvent, (s, e) => result.Add("dt")); decorator.AddHandler(Gestures.DoubleTappedEvent, (s, e) => result.Add("ddt")); border.AddHandler(Border.PointerPressedEvent, (s, e) => result.Add("bp")); border.AddHandler(Border.PointerReleasedEvent, (s, e) => result.Add("br")); border.AddHandler(Gestures.TappedEvent, (s, e) => result.Add("bt")); border.AddHandler(Gestures.DoubleTappedEvent, (s, e) => result.Add("bdt")); border.RaiseEvent(new PointerPressedEventArgs()); border.RaiseEvent(new PointerReleasedEventArgs()); border.RaiseEvent(new PointerPressedEventArgs { ClickCount = 2 }); Assert.Equal(new[] { "bp", "dp", "br", "dr", "bt", "dt", "bp", "dp", "bdt", "ddt" }, result); }
public void Border_Brush_Offsets_Content() { Decorator target = new Decorator { Padding = new Thickness(8), Width = 200, Height = 200, Child = new Border { BorderBrush = Brushes.Black, BorderThickness = 2, Child = new Border { Background = Brushes.Red, } } }; RenderToFile(target); CompareImages(); }
public void Border_Nested_Rotate() { Decorator target = new Decorator { Padding = new Thickness(8), Width = 200, Height = 200, Child = new Border { Background = Brushes.Coral, Width = 100, Height = 100, HorizontalAlignment = HorizontalAlignment.Center, VerticalAlignment = VerticalAlignment.Center, Child = new Border { Margin = new Thickness(25), Background = Brushes.Chocolate, }, RenderTransform = new RotateTransform(45), } }; RenderToFile(target); CompareImages(); }
public void Negative_Margin_Larger_Than_Constraint_Should_Request_Height_0() { Control target; var outer = new Decorator { Width = 100, Height = 100, Child = target = new Control { Margin = new Thickness(0, -100, 0, 0), } }; outer.Measure(Size.Infinity); Assert.Equal(0, target.DesiredSize.Height); }