1
0

DirectPropertyTests.cs 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. // Copyright (c) The Avalonia Project. All rights reserved.
  2. // Licensed under the MIT license. See licence.md file in the project root for full license information.
  3. using Xunit;
  4. namespace Avalonia.Base.UnitTests
  5. {
  6. public class DirectPropertyTests
  7. {
  8. [Fact]
  9. public void IsDirect_Property_Returns_True()
  10. {
  11. var target = new DirectProperty<Class1, string>(
  12. "test",
  13. o => null,
  14. null,
  15. new DirectPropertyMetadata<string>(),
  16. false);
  17. Assert.True(target.IsDirect);
  18. }
  19. [Fact]
  20. public void AddOwnered_Property_Should_Equal_Original()
  21. {
  22. var p1 = Class1.FooProperty;
  23. var p2 = p1.AddOwner<Class2>(o => null, (o, v) => { });
  24. Assert.NotSame(p1, p2);
  25. Assert.True(p1.Equals(p2));
  26. Assert.Equal(p1.GetHashCode(), p2.GetHashCode());
  27. Assert.True(p1 == p2);
  28. }
  29. [Fact]
  30. public void AddOwnered_Property_Should_Have_OwnerType_Set()
  31. {
  32. var p1 = Class1.FooProperty;
  33. var p2 = p1.AddOwner<Class2>(o => null, (o, v) => { });
  34. Assert.Equal(typeof(Class2), p2.OwnerType);
  35. }
  36. [Fact]
  37. public void AddOwnered_Properties_Should_Share_Observables()
  38. {
  39. var p1 = Class1.FooProperty;
  40. var p2 = p1.AddOwner<Class2>(o => null, (o, v) => { });
  41. Assert.Same(p1.Changed, p2.Changed);
  42. }
  43. private class Class1 : AvaloniaObject
  44. {
  45. public static readonly DirectProperty<Class1, string> FooProperty =
  46. AvaloniaProperty.RegisterDirect<Class1, string>(nameof(Foo), o => o.Foo, (o, v) => o.Foo = v);
  47. private string _foo = "foo";
  48. public string Foo
  49. {
  50. get { return _foo; }
  51. set { SetAndRaise(FooProperty, ref _foo, value); }
  52. }
  53. }
  54. private class Class2 : AvaloniaObject
  55. {
  56. }
  57. }
  58. }