| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217 |
- #nullable enable
- using Avalonia.Collections;
- using Avalonia.Controls.Shapes;
- using Avalonia.Media;
- using Avalonia.Platform;
- using Avalonia.Rendering.SceneGraph;
- using Avalonia.UnitTests;
- using Avalonia.Utilities;
- using Xunit;
- namespace Avalonia.Controls.UnitTests.Shapes;
- public class ShapeTests : ScopedTestBase
- {
- [Fact]
- public void StrokeMiterLimit_Default_Is_Applied_To_Pen()
- {
- using var app = UnitTestApplication.Start(TestServices.MockPlatformRenderInterface);
- var pen = RenderAndGetPen(new TestShape
- {
- StrokeThickness = 4,
- Stroke = Brushes.Black
- });
- Assert.NotNull(pen);
- Assert.Equal(10, pen.MiterLimit);
- }
- [Fact]
- public void StrokeMiterLimit_Update_Refreshes_Pen()
- {
- using var app = UnitTestApplication.Start(TestServices.MockPlatformRenderInterface);
- var shape = new TestShape
- {
- StrokeThickness = 4,
- Stroke = Brushes.Black
- };
- RenderAndGetPen(shape);
- shape.StrokeMiterLimit = 2;
- var pen = RenderAndGetPen(shape);
- Assert.NotNull(pen);
- Assert.Equal(2, pen.MiterLimit);
- }
- [Fact]
- public void StrokeThickness_Is_Applied_To_Pen()
- {
- using var app = UnitTestApplication.Start(TestServices.MockPlatformRenderInterface);
- var pen = RenderAndGetPen(new TestShape
- {
- StrokeThickness = 6,
- Stroke = Brushes.Black
- });
- Assert.NotNull(pen);
- Assert.Equal(6, pen.Thickness);
- }
- [Fact]
- public void StrokeLineCap_And_Join_Are_Applied_To_Pen()
- {
- using var app = UnitTestApplication.Start(TestServices.MockPlatformRenderInterface);
- var pen = RenderAndGetPen(new TestShape
- {
- Stroke = Brushes.Black,
- StrokeThickness = 4,
- StrokeLineCap = PenLineCap.Round,
- StrokeJoin = PenLineJoin.Bevel
- });
- Assert.NotNull(pen);
- Assert.Equal(PenLineCap.Round, pen.LineCap);
- Assert.Equal(PenLineJoin.Bevel, pen.LineJoin);
- }
- [Fact]
- public void StrokeDashArray_And_Offset_Are_Applied_To_Pen()
- {
- using var app = UnitTestApplication.Start(TestServices.MockPlatformRenderInterface);
- var pen = RenderAndGetPen(new TestShape
- {
- Stroke = Brushes.Black,
- StrokeThickness = 4,
- StrokeDashArray = new AvaloniaList<double>(1, 2, 3),
- StrokeDashOffset = 1.5
- });
- Assert.NotNull(pen);
- Assert.NotNull(pen.DashStyle);
- Assert.Equal(3, pen.DashStyle!.Dashes!.Count);
- Assert.Equal(1, pen.DashStyle.Dashes[0]);
- Assert.Equal(2, pen.DashStyle.Dashes[1]);
- Assert.Equal(3, pen.DashStyle.Dashes[2]);
- Assert.Equal(1.5, pen.DashStyle.Offset);
- }
- [Fact]
- public void No_Stroke_Produces_No_Pen()
- {
- using var app = UnitTestApplication.Start(TestServices.MockPlatformRenderInterface);
- var pen = RenderAndGetPen(new TestShape
- {
- Stroke = null,
- StrokeThickness = 4
- });
- Assert.Null(pen);
- }
- private static IPen? RenderAndGetPen(Shape shape)
- {
- using var context = new RecordingDrawingContext();
- shape.Render(context);
- return context.LastPen;
- }
- private class TestShape : Shape
- {
- protected override Geometry CreateDefiningGeometry() =>
- new RectangleGeometry(new Rect(0, 0, 20, 20));
- }
- private class RecordingDrawingContext : DrawingContext
- {
- public IPen? LastPen { get; private set; }
- public void Reset() => LastPen = null;
- internal override void DrawBitmap(IRef<IBitmapImpl> source, double opacity, Rect sourceRect, Rect destRect)
- {
- }
- protected override void DrawLineCore(IPen pen, Point p1, Point p2)
- {
- }
- protected override void DrawGeometryCore(IBrush? brush, IPen? pen, IGeometryImpl geometry)
- {
- LastPen = pen;
- }
- protected override void DrawRectangleCore(IBrush? brush, IPen? pen, RoundedRect rrect, BoxShadows boxShadows = default)
- {
- }
- protected override void DrawEllipseCore(IBrush? brush, IPen? pen, Rect rect)
- {
- }
- public override void Custom(ICustomDrawOperation custom)
- {
- }
- public override void DrawGlyphRun(IBrush? foreground, GlyphRun glyphRun)
- {
- }
- protected override void PushClipCore(RoundedRect rect)
- {
- }
- protected override void PushClipCore(Rect rect)
- {
- }
- protected override void PushGeometryClipCore(Geometry clip)
- {
- }
- protected override void PushOpacityCore(double opacity)
- {
- }
- protected override void PushOpacityMaskCore(IBrush mask, Rect bounds)
- {
- }
- protected override void PushRenderOptionsCore(RenderOptions renderOptions)
- {
- }
- protected override void PushTransformCore(Matrix matrix)
- {
- }
- protected override void PopClipCore()
- {
- }
- protected override void PopGeometryClipCore()
- {
- }
- protected override void PopOpacityCore()
- {
- }
- protected override void PopOpacityMaskCore()
- {
- }
- protected override void PopTransformCore()
- {
- }
- protected override void PopRenderOptionsCore()
- {
- }
- protected override void DisposeCore()
- {
- }
- }
- }
|