|
|
@@ -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())
|
|
|
{
|
|
|
}
|
|
|
|