A cross-platform UI framework for .NET
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

201 lines
6.7 KiB

#nullable enable
using System;
using Avalonia.Collections;
using Avalonia.Media;
using Avalonia.Media.Immutable;
using Xunit;
namespace Avalonia.Base.UnitTests.Media
{
public class PenTests
{
[Fact]
public void Changing_Thickness_Raises_Invalidated()
{
var target = new Pen();
RenderResourceTestHelper.AssertResourceInvalidation(target, () =>
{
target.Thickness = 18;
});
}
[Fact]
public void Brush_Is_Added_To_The_Same_Compositor()
{
var brush = new SolidColorBrush(Colors.Red);
var target = new Pen { Brush = brush };
using var helper = new RenderResourceTestHelper();
helper.AssertExistsOnCompositor(brush, false);
helper.AddToCompositor(target);
helper.AssertExistsOnCompositor(brush);
Assert.True(helper.IsInvalidated(brush));
}
[Fact]
public void Changing_DashStyle_Dashes_Raises_Invalidated()
{
var dashes = new DashStyle();
var target = new Pen { DashStyle = dashes };
RenderResourceTestHelper.AssertResourceInvalidation(target, () =>
{
dashes.Dashes = new AvaloniaList<double> { 0.1, 0.2 };
});
}
[Fact]
public void Adding_DashStyle_Dashes_Raises_Invalidated()
{
var dashes = new DashStyle();
var target = new Pen { DashStyle = dashes };
RenderResourceTestHelper.AssertResourceInvalidation(target, () =>
{
dashes.Dashes = new AvaloniaList<double>
{
0.3
};
});
}
[Fact]
public void Adding_DashStyle_Dash_Raises_Invalidated()
{
var dashes = new DashStyle();
var target = new Pen { DashStyle = dashes };
dashes.Dashes = new AvaloniaList<double>
{
0.3
};
RenderResourceTestHelper.AssertResourceInvalidation(target, () =>
{
dashes.Dashes.AddRange(new[] { 1.0, 2 });
});
}
[Fact]
public void Equality_Is_Implemented_Between_Immutable_And_Mutable_Pens()
{
var brush = new ImmutableSolidColorBrush(Colors.Red);
var target1 = new ImmutablePen(
brush: brush,
thickness: 2,
dashStyle: (ImmutableDashStyle)DashStyle.Dash,
lineCap: PenLineCap.Round,
lineJoin: PenLineJoin.Round,
miterLimit: 21);
var target2 = new Pen(
brush: brush,
thickness: 2,
dashStyle: DashStyle.Dash,
lineCap: PenLineCap.Round,
lineJoin: PenLineJoin.Round,
miterLimit: 21);
Assert.True(Equals(target1, target2));
}
[Fact]
public void Equality_Is_Implemented_Between_Mutable_And_Immutable_DashStyles()
{
var brush = new ImmutableSolidColorBrush(Colors.Red);
var target1 = new ImmutablePen(
brush: brush,
thickness: 2,
dashStyle: new ImmutableDashStyle(new[] { 0.1, 0.2 }, 5),
lineCap: PenLineCap.Round,
lineJoin: PenLineJoin.Round,
miterLimit: 21);
var target2 = new Pen(
brush: brush,
thickness: 2,
dashStyle: new DashStyle(new[] { 0.1, 0.2 }, 5),
lineCap: PenLineCap.Round,
lineJoin: PenLineJoin.Round,
miterLimit: 21);
Assert.True(Equals(target1, target2));
}
[Fact]
public void TryModifyOrCreate_Should_Return_True_When_Previous_Exists_And_Assign_Null_When_Brush_Is_Null()
{
IPen? target = new ImmutablePen(
brush: new ImmutableSolidColorBrush(Colors.Red),
thickness: 2,
dashStyle: new ImmutableDashStyle(new[] { 0.1, 0.2 }, 5),
lineCap: PenLineCap.Round,
lineJoin: PenLineJoin.Round,
miterLimit: 21);
var result = Pen.TryModifyOrCreate(ref target, null, 2);
Assert.True(result);
Assert.Null(target);
}
[Fact]
public void TryModifyOrCreate_Should_Return_False_When_Previous_Not_Exists_And_Assign_Null_When_Brush_Is_Null()
{
IPen? target = null;
var result = Pen.TryModifyOrCreate(ref target, null, 2);
Assert.False(result);
Assert.Null(target);
}
[Fact]
public void TryModifyOrCreate_Should_Return_True_When_Previous_Immutable_And_Assign_Mutable_When_Brush_Is_Mutable()
{
IPen? target = new ImmutablePen(
brush: new ImmutableSolidColorBrush(Colors.Red),
thickness: 2,
dashStyle: new ImmutableDashStyle(new[] { 0.1, 0.2 }, 5),
lineCap: PenLineCap.Round,
lineJoin: PenLineJoin.Round,
miterLimit: 21);
var result = Pen.TryModifyOrCreate(ref target, new SolidColorBrush(Colors.Blue), 2);
Assert.True(result);
Assert.IsType<Pen>(target);
}
[Fact]
public void TryModifyOrCreate_Should_Return_True_When_Previous_Immutable_And_Assign_Immutable_When_Brush_Is_Immutable()
{
IPen? target = new ImmutablePen(
brush: new ImmutableSolidColorBrush(Colors.Red),
thickness: 2,
dashStyle: new ImmutableDashStyle(new[] { 0.1, 0.2 }, 5),
lineCap: PenLineCap.Round,
lineJoin: PenLineJoin.Round,
miterLimit: 21);
var result = Pen.TryModifyOrCreate(ref target, new ImmutableSolidColorBrush(Colors.Blue), 2);
Assert.True(result);
Assert.IsType<ImmutablePen>(target);
}
[Fact]
public void TryModifyOrCreate_Should_Return_False_When_Previous_Mutable_And_Modify_Mutable_When_Brush_Is_Mutable()
{
var oldPen = new Pen(
brush: new SolidColorBrush(Colors.Red),
thickness: 2,
dashStyle: new ImmutableDashStyle(new[] { 0.1, 0.2 }, 5),
lineCap: PenLineCap.Round,
lineJoin: PenLineJoin.Round,
miterLimit: 21);
IPen? target = oldPen;
var result = Pen.TryModifyOrCreate(ref target, new SolidColorBrush(Colors.Blue), 2);
Assert.False(result);
Assert.Same(oldPen, target);
}
}
}