1
0

AvaloniaObjectTests_Metadata.cs 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. using System.Runtime.CompilerServices;
  2. using Xunit;
  3. namespace Avalonia.Base.UnitTests
  4. {
  5. public class AvaloniaObjectTests_Metadata
  6. {
  7. public AvaloniaObjectTests_Metadata()
  8. {
  9. // Ensure properties are registered.
  10. RuntimeHelpers.RunClassConstructor(typeof(Class1).TypeHandle);
  11. RuntimeHelpers.RunClassConstructor(typeof(Class2).TypeHandle);
  12. RuntimeHelpers.RunClassConstructor(typeof(Class3).TypeHandle);
  13. }
  14. public class StyledProperty : AvaloniaObjectTests_Metadata
  15. {
  16. [Fact]
  17. public void Default_Value_Can_Be_Overridden_In_Derived_Class()
  18. {
  19. var baseValue = Class1.StyledProperty.GetDefaultValue(typeof(Class1));
  20. var derivedValue = Class1.StyledProperty.GetDefaultValue(typeof(Class2));
  21. Assert.Equal("foo", baseValue);
  22. Assert.Equal("bar", derivedValue);
  23. }
  24. [Fact]
  25. public void Default_Value_Can_Be_Overridden_In_AddOwnered_Property()
  26. {
  27. var baseValue = Class1.StyledProperty.GetDefaultValue(typeof(Class1));
  28. var addOwneredValue = Class1.StyledProperty.GetDefaultValue(typeof(Class3));
  29. Assert.Equal("foo", baseValue);
  30. Assert.Equal("baz", addOwneredValue);
  31. }
  32. }
  33. public class DirectProperty : AvaloniaObjectTests_Metadata
  34. {
  35. [Fact]
  36. public void Unset_Value_Can_Be_Overridden_In_Derived_Class()
  37. {
  38. var baseValue = Class1.DirectProperty.GetUnsetValue(typeof(Class1));
  39. var derivedValue = Class1.DirectProperty.GetUnsetValue(typeof(Class2));
  40. Assert.Equal("foo", baseValue);
  41. Assert.Equal("bar", derivedValue);
  42. }
  43. [Fact]
  44. public void Unset_Value_Can_Be_Overridden_In_AddOwnered_Property()
  45. {
  46. var baseValue = Class1.DirectProperty.GetUnsetValue(typeof(Class1));
  47. var addOwneredValue = Class3.DirectProperty.GetUnsetValue(typeof(Class3));
  48. Assert.Equal("foo", baseValue);
  49. Assert.Equal("baz", addOwneredValue);
  50. }
  51. }
  52. private class Class1 : AvaloniaObject
  53. {
  54. public static readonly StyledProperty<string> StyledProperty =
  55. AvaloniaProperty.Register<Class1, string>("Styled", "foo");
  56. public static readonly DirectProperty<Class1, string> DirectProperty =
  57. AvaloniaProperty.RegisterDirect<Class1, string>("Styled", o => o.Direct, unsetValue: "foo");
  58. private string _direct = default;
  59. public string Direct
  60. {
  61. get => _direct;
  62. }
  63. }
  64. private class Class2 : Class1
  65. {
  66. static Class2()
  67. {
  68. StyledProperty.OverrideDefaultValue<Class2>("bar");
  69. DirectProperty.OverrideMetadata<Class2>(new DirectPropertyMetadata<string>("bar"));
  70. }
  71. }
  72. private class Class3 : AvaloniaObject
  73. {
  74. public static readonly StyledProperty<string> StyledProperty =
  75. Class1.StyledProperty.AddOwner<Class3>();
  76. public static readonly DirectProperty<Class3, string> DirectProperty =
  77. Class1.DirectProperty.AddOwner<Class3>(o => o.Direct, unsetValue: "baz");
  78. private string _direct = default;
  79. static Class3()
  80. {
  81. StyledProperty.OverrideDefaultValue<Class3>("baz");
  82. }
  83. public string Direct
  84. {
  85. get => _direct;
  86. }
  87. }
  88. }
  89. }