|
|
|
@ -2,8 +2,6 @@ using System; |
|
|
|
using System.Collections.Generic; |
|
|
|
using Avalonia.Data; |
|
|
|
using Avalonia.PropertyStore; |
|
|
|
using Avalonia.Styling; |
|
|
|
using Avalonia.Utilities; |
|
|
|
using Xunit; |
|
|
|
|
|
|
|
namespace Avalonia.Base.UnitTests |
|
|
|
@ -29,7 +27,7 @@ namespace Avalonia.Base.UnitTests |
|
|
|
[Fact] |
|
|
|
public void GetMetadata_Returns_Supplied_Value() |
|
|
|
{ |
|
|
|
var metadata = new AvaloniaPropertyMetadata(); |
|
|
|
var metadata = new TestMetadata(); |
|
|
|
var target = new TestProperty<string>("test", typeof(Class1), metadata); |
|
|
|
|
|
|
|
Assert.Same(metadata, target.GetMetadata<Class1>()); |
|
|
|
@ -38,26 +36,30 @@ namespace Avalonia.Base.UnitTests |
|
|
|
[Fact] |
|
|
|
public void GetMetadata_Returns_Supplied_Value_For_Derived_Class() |
|
|
|
{ |
|
|
|
var metadata = new AvaloniaPropertyMetadata(); |
|
|
|
var metadata = new TestMetadata(); |
|
|
|
var target = new TestProperty<string>("test", typeof(Class1), metadata); |
|
|
|
|
|
|
|
Assert.Same(metadata, target.GetMetadata<Class2>()); |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
public void GetMetadata_Returns_Supplied_Value_For_Unrelated_Class() |
|
|
|
public void GetMetadata_Returns_TypeSafe_Metadata_For_Unrelated_Class() |
|
|
|
{ |
|
|
|
var metadata = new AvaloniaPropertyMetadata(); |
|
|
|
var metadata = new TestMetadata(BindingMode.OneWayToSource, true, x => { _ = (StyledElement)x; }); |
|
|
|
var target = new TestProperty<string>("test", typeof(Class3), metadata); |
|
|
|
|
|
|
|
Assert.Same(metadata, target.GetMetadata<Class2>()); |
|
|
|
var targetMetadata = (TestMetadata)target.GetMetadata<Class2>(); |
|
|
|
|
|
|
|
Assert.Equal(metadata.DefaultBindingMode, targetMetadata.DefaultBindingMode); |
|
|
|
Assert.Equal(metadata.EnableDataValidation, targetMetadata.EnableDataValidation); |
|
|
|
Assert.Equal(null, targetMetadata.OwnerSpecificAction); |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
public void GetMetadata_Returns_Overridden_Value() |
|
|
|
{ |
|
|
|
var metadata = new AvaloniaPropertyMetadata(); |
|
|
|
var overridden = new AvaloniaPropertyMetadata(); |
|
|
|
var metadata = new TestMetadata(); |
|
|
|
var overridden = new TestMetadata(); |
|
|
|
var target = new TestProperty<string>("test", typeof(Class1), metadata); |
|
|
|
|
|
|
|
target.OverrideMetadata<Class2>(overridden); |
|
|
|
@ -68,9 +70,9 @@ namespace Avalonia.Base.UnitTests |
|
|
|
[Fact] |
|
|
|
public void OverrideMetadata_Should_Merge_Values() |
|
|
|
{ |
|
|
|
var metadata = new AvaloniaPropertyMetadata(BindingMode.TwoWay); |
|
|
|
var metadata = new TestMetadata(BindingMode.TwoWay); |
|
|
|
var notify = (Action<AvaloniaObject, bool>)((a, b) => { }); |
|
|
|
var overridden = new AvaloniaPropertyMetadata(); |
|
|
|
var overridden = new TestMetadata(); |
|
|
|
var target = new TestProperty<string>("test", typeof(Class1), metadata); |
|
|
|
|
|
|
|
target.OverrideMetadata<Class2>(overridden); |
|
|
|
@ -131,15 +133,31 @@ namespace Avalonia.Base.UnitTests |
|
|
|
[Fact] |
|
|
|
public void PropertyMetadata_BindingMode_Default_Returns_OneWay() |
|
|
|
{ |
|
|
|
var data = new AvaloniaPropertyMetadata(defaultBindingMode: BindingMode.Default); |
|
|
|
var data = new TestMetadata(defaultBindingMode: BindingMode.Default); |
|
|
|
|
|
|
|
Assert.Equal(BindingMode.OneWay, data.DefaultBindingMode); |
|
|
|
} |
|
|
|
|
|
|
|
private class TestMetadata : AvaloniaPropertyMetadata |
|
|
|
{ |
|
|
|
public Action<AvaloniaObject> OwnerSpecificAction { get; } |
|
|
|
|
|
|
|
public TestMetadata(BindingMode defaultBindingMode = BindingMode.Default, |
|
|
|
bool? enableDataValidation = null, |
|
|
|
Action<AvaloniaObject> ownerSpecificAction = null) |
|
|
|
: base(defaultBindingMode, enableDataValidation) |
|
|
|
{ |
|
|
|
OwnerSpecificAction = ownerSpecificAction; |
|
|
|
} |
|
|
|
|
|
|
|
public override AvaloniaPropertyMetadata GenerateTypeSafeMetadata() => |
|
|
|
new TestMetadata(DefaultBindingMode, EnableDataValidation, null); |
|
|
|
} |
|
|
|
|
|
|
|
private class TestProperty<TValue> : AvaloniaProperty<TValue> |
|
|
|
{ |
|
|
|
public TestProperty(string name, Type ownerType, AvaloniaPropertyMetadata metadata = null) |
|
|
|
: base(name, ownerType, metadata ?? new AvaloniaPropertyMetadata()) |
|
|
|
public TestProperty(string name, Type ownerType, TestMetadata metadata = null) |
|
|
|
: base(name, ownerType, metadata ?? new TestMetadata()) |
|
|
|
{ |
|
|
|
} |
|
|
|
|
|
|
|
|