ValueStoreTests_BatchUpdate.cs 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Reactive;
  4. using System.Reactive.Disposables;
  5. using System.Reactive.Linq;
  6. using Avalonia.Controls;
  7. using Avalonia.Data;
  8. using Xunit;
  9. #nullable enable
  10. namespace Avalonia.Base.UnitTests
  11. {
  12. public class ValueStoreTests_BatchUpdate
  13. {
  14. ////[Fact]
  15. ////public void SetValue_Should_Not_Raise_Property_Changes_During_Batch_Update()
  16. ////{
  17. //// var o = new TestClass();
  18. //// var target = CreateTarget(o);
  19. //// var raised = new List<string>();
  20. //// o.GetObservable(TestClass.FooProperty).Skip(1).Subscribe(x => raised.Add(x));
  21. //// target.BeginBatchUpdate();
  22. //// target.SetValue(TestClass.FooProperty, "foo", BindingPriority.LocalValue);
  23. //// Assert.Empty(raised);
  24. ////}
  25. ////[Fact]
  26. ////public void AddBinding_Should_Not_Raise_Property_Changes_During_Batch_Update()
  27. ////{
  28. //// var o = new TestClass();
  29. //// var target = CreateTarget(o);
  30. //// var observable = new TestObservable<string>("foo");
  31. //// var raised = new List<string>();
  32. //// o.GetObservable(TestClass.FooProperty).Skip(1).Subscribe(x => raised.Add(x));
  33. //// target.BeginBatchUpdate();
  34. //// target.AddBinding(TestClass.FooProperty, observable, BindingPriority.LocalValue);
  35. //// Assert.Empty(raised);
  36. ////}
  37. ////[Fact]
  38. ////public void SetValue_Change_Should_Be_Raised_After_Batch_Update()
  39. ////{
  40. //// var o = new TestClass();
  41. //// var target = CreateTarget(o);
  42. //// var raised = new List<AvaloniaPropertyChangedEventArgs>();
  43. //// target.SetValue(TestClass.FooProperty, "foo", BindingPriority.LocalValue);
  44. //// o.PropertyChanged += (s, e) => raised.Add(e);
  45. //// target.BeginBatchUpdate();
  46. //// target.SetValue(TestClass.FooProperty, "bar", BindingPriority.LocalValue);
  47. //// target.SetValue(TestClass.FooProperty, "baz", BindingPriority.LocalValue);
  48. //// target.EndBatchUpdate();
  49. //// Assert.Equal(1, raised.Count);
  50. ////}
  51. ////[Fact]
  52. ////public void Bindings_Should_Be_Subscribed_Before_Batch_Update()
  53. ////{
  54. //// var target = CreateTarget();
  55. //// var observable1 = new TestObservable<string>("foo");
  56. //// var observable2 = new TestObservable<string>("bar");
  57. //// target.AddBinding(Window.TitleProperty, observable1, BindingPriority.LocalValue);
  58. //// target.AddBinding(Window.TitleProperty, observable2, BindingPriority.LocalValue);
  59. //// Assert.Equal(1, observable1.SubscribeCount);
  60. //// Assert.Equal(1, observable2.SubscribeCount);
  61. ////}
  62. ////[Fact]
  63. ////public void Non_Active_Binding_Should_Not_Be_Subscribed_Before_Batch_Update()
  64. ////{
  65. //// var target = CreateTarget();
  66. //// var observable1 = new TestObservable<string>("foo");
  67. //// var observable2 = new TestObservable<string>("bar");
  68. //// target.AddBinding(Window.TitleProperty, observable1, BindingPriority.LocalValue);
  69. //// target.AddBinding(Window.TitleProperty, observable2, BindingPriority.Style);
  70. //// Assert.Equal(1, observable1.SubscribeCount);
  71. //// Assert.Equal(0, observable2.SubscribeCount);
  72. ////}
  73. ////[Fact]
  74. ////public void Bindings_Should_Not_Be_Subscribed_During_Batch_Update()
  75. ////{
  76. //// var target = CreateTarget();
  77. //// var observable1 = new TestObservable<string>("foo");
  78. //// var observable2 = new TestObservable<string>("bar");
  79. //// var observable3 = new TestObservable<string>("baz");
  80. //// target.BeginBatchUpdate();
  81. //// target.AddBinding(Window.TitleProperty, observable1, BindingPriority.LocalValue);
  82. //// target.AddBinding(Window.TitleProperty, observable2, BindingPriority.LocalValue);
  83. //// target.AddBinding(Window.TitleProperty, observable3, BindingPriority.Style);
  84. //// Assert.Equal(0, observable1.SubscribeCount);
  85. //// Assert.Equal(0, observable2.SubscribeCount);
  86. //// Assert.Equal(0, observable3.SubscribeCount);
  87. ////}
  88. ////[Fact]
  89. ////public void Active_Binding_Should_Be_Subscribed_After_Batch_Uppdate()
  90. ////{
  91. //// var target = CreateTarget();
  92. //// var observable1 = new TestObservable<string>("foo");
  93. //// var observable2 = new TestObservable<string>("bar");
  94. //// var observable3 = new TestObservable<string>("baz");
  95. //// target.BeginBatchUpdate();
  96. //// target.AddBinding(Window.TitleProperty, observable1, BindingPriority.LocalValue);
  97. //// target.AddBinding(Window.TitleProperty, observable2, BindingPriority.LocalValue);
  98. //// target.AddBinding(Window.TitleProperty, observable3, BindingPriority.Style);
  99. //// target.EndBatchUpdate();
  100. //// Assert.Equal(0, observable1.SubscribeCount);
  101. //// Assert.Equal(1, observable2.SubscribeCount);
  102. //// Assert.Equal(0, observable3.SubscribeCount);
  103. ////}
  104. ////private ValueStore CreateTarget(AvaloniaObject? o = null)
  105. ////{
  106. //// o ??= new TestClass();
  107. //// return o.Values;
  108. ////}
  109. ////public class TestClass : AvaloniaObject
  110. ////{
  111. //// public static readonly StyledProperty<string> FooProperty =
  112. //// AvaloniaProperty.Register<TestClass, string>(nameof(Foo));
  113. //// public string Foo
  114. //// {
  115. //// get => GetValue(FooProperty);
  116. //// set => SetValue(FooProperty, value);
  117. //// }
  118. ////}
  119. ////public class TestObservable<T> : ObservableBase<BindingValue<T>>
  120. ////{
  121. //// private readonly T _value;
  122. //// public TestObservable(T value) => _value = value;
  123. //// public int SubscribeCount { get; private set; }
  124. //// protected override IDisposable SubscribeCore(IObserver<BindingValue<T>> observer)
  125. //// {
  126. //// ++SubscribeCount;
  127. //// observer.OnNext(_value);
  128. //// return Disposable.Empty;
  129. //// }
  130. ////}
  131. }
  132. }