Browse Source

Force compacting WeakEvent subscriber list in before assertions in tests

Nikita Tsukanov 3 years ago
parent
commit
f010322a06

+ 3 - 0
tests/Avalonia.Base.UnitTests/Data/Core/ExpressionObserverTests_DataValidation.cs

@@ -6,6 +6,7 @@ using System.Reactive.Linq;
 using Avalonia.Data;
 using Avalonia.Data.Core;
 using Avalonia.Markup.Parsers;
+using Avalonia.Threading;
 using Avalonia.UnitTests;
 using Xunit;
 
@@ -67,6 +68,8 @@ namespace Avalonia.Base.UnitTests.Data.Core
 
             Assert.Equal(1, data.ErrorsChangedSubscriptionCount);
             sub.Dispose();
+            // Forces WeakEvent compact
+            Dispatcher.UIThread.RunJobs();
             Assert.Equal(0, data.ErrorsChangedSubscriptionCount);
         }
 

+ 12 - 0
tests/Avalonia.Base.UnitTests/Data/Core/ExpressionObserverTests_Indexer.cs

@@ -9,6 +9,7 @@ using Avalonia.Data.Core;
 using Avalonia.UnitTests;
 using Xunit;
 using Avalonia.Markup.Parsers;
+using Avalonia.Threading;
 
 namespace Avalonia.Base.UnitTests.Data.Core
 {
@@ -110,6 +111,9 @@ namespace Avalonia.Base.UnitTests.Data.Core
                 data.Foo.Add("baz");
             }
 
+            // Forces WeakEvent compact
+            Dispatcher.UIThread.RunJobs();
+            
             Assert.Equal(new[] { AvaloniaProperty.UnsetValue, "baz" }, result);
             Assert.Null(((INotifyCollectionChangedDebug)data.Foo).GetCollectionChangedSubscribers());
 
@@ -127,6 +131,8 @@ namespace Avalonia.Base.UnitTests.Data.Core
             {
                 data.Foo.RemoveAt(0);
             }
+            // Forces WeakEvent compact
+            Dispatcher.UIThread.RunJobs();
 
             Assert.Equal(new[] { "foo", "bar" }, result);
             Assert.Null(((INotifyCollectionChangedDebug)data.Foo).GetCollectionChangedSubscribers());
@@ -145,6 +151,9 @@ namespace Avalonia.Base.UnitTests.Data.Core
             {
                 data.Foo[1] = "baz";
             }
+            
+            // Forces WeakEvent compact
+            Dispatcher.UIThread.RunJobs();
 
             Assert.Equal(new[] { "bar", "baz" }, result);
             Assert.Null(((INotifyCollectionChangedDebug)data.Foo).GetCollectionChangedSubscribers());
@@ -202,6 +211,9 @@ namespace Avalonia.Base.UnitTests.Data.Core
                 data.Foo["foo"] = "bar2";
             }
 
+            // Forces WeakEvent compact
+            Dispatcher.UIThread.RunJobs();
+            
             var expected = new[] { "bar", "bar2" };
             Assert.Equal(expected, result);
             Assert.Equal(0, data.Foo.PropertyChangedSubscriptionCount);

+ 10 - 1
tests/Avalonia.Base.UnitTests/Data/Core/ExpressionObserverTests_Observable.cs

@@ -5,6 +5,7 @@ using System.Reactive.Subjects;
 using Avalonia.Data;
 using Avalonia.Data.Core;
 using Avalonia.Markup.Parsers;
+using Avalonia.Threading;
 using Avalonia.UnitTests;
 using Xunit;
 
@@ -68,6 +69,8 @@ namespace Avalonia.Base.UnitTests.Data.Core
                 Assert.Equal(new[] { "foo" }, result);
 
                 sub.Dispose();
+                // Forces WeakEvent compact
+                Dispatcher.UIThread.RunJobs();
                 Assert.Equal(0, data.PropertyChangedSubscriptionCount);
 
                 GC.KeepAlive(data);
@@ -109,10 +112,16 @@ namespace Avalonia.Base.UnitTests.Data.Core
                 var sub = target.Subscribe(x => result.Add(x));
                 data1.Next.OnNext(data2);
                 sync.ExecutePostedCallbacks();
-
+                
+                // Forces WeakEvent compact
+                Dispatcher.UIThread.RunJobs();
                 Assert.Equal(new[] { new BindingNotification("foo") }, result);
 
                 sub.Dispose();
+                
+                // Forces WeakEvent compact
+                Dispatcher.UIThread.RunJobs();
+                
                 Assert.Equal(0, data1.PropertyChangedSubscriptionCount);
 
                 GC.KeepAlive(data1);

+ 25 - 2
tests/Avalonia.Base.UnitTests/Data/Core/ExpressionObserverTests_Property.cs

@@ -10,6 +10,7 @@ using Avalonia.UnitTests;
 using Xunit;
 using System.Threading.Tasks;
 using Avalonia.Markup.Parsers;
+using Avalonia.Threading;
 
 namespace Avalonia.Base.UnitTests.Data.Core
 {
@@ -182,6 +183,9 @@ namespace Avalonia.Base.UnitTests.Data.Core
 
             sub.Dispose();
 
+            // Forces WeakEvent compact
+            Dispatcher.UIThread.RunJobs();
+            
             Assert.Equal(0, data.PropertyChangedSubscriptionCount);
 
             GC.KeepAlive(data);
@@ -209,8 +213,11 @@ namespace Avalonia.Base.UnitTests.Data.Core
             data.RaisePropertyChanged(null);
 
             Assert.Equal(new[] { "foo", "bar", "bar" }, result);
-
+            
             sub.Dispose();
+            
+            // Forces WeakEvent compact
+            Dispatcher.UIThread.RunJobs();
 
             Assert.Equal(0, data.PropertyChangedSubscriptionCount);
 
@@ -231,7 +238,9 @@ namespace Avalonia.Base.UnitTests.Data.Core
             Assert.Equal(new[] { "bar", "baz", null }, result);
 
             sub.Dispose();
-
+            // Forces WeakEvent compact
+            Dispatcher.UIThread.RunJobs();
+            
             Assert.Equal(0, data.PropertyChangedSubscriptionCount);
             Assert.Equal(0, data.Next.PropertyChangedSubscriptionCount);
 
@@ -253,6 +262,9 @@ namespace Avalonia.Base.UnitTests.Data.Core
             Assert.Equal(new[] { "bar", "baz", null }, result);
 
             sub.Dispose();
+            
+            // Forces WeakEvent compact
+            Dispatcher.UIThread.RunJobs();
 
             Assert.Equal(0, data.PropertyChangedSubscriptionCount);
             Assert.Equal(0, data.Next.PropertyChangedSubscriptionCount);
@@ -297,6 +309,9 @@ namespace Avalonia.Base.UnitTests.Data.Core
 
             sub.Dispose();
 
+            // Forces WeakEvent compact
+            Dispatcher.UIThread.RunJobs();
+            
             Assert.Equal(0, data.PropertyChangedSubscriptionCount);
             Assert.Equal(0, data.Next.PropertyChangedSubscriptionCount);
             Assert.Equal(0, old.PropertyChangedSubscriptionCount);
@@ -329,6 +344,9 @@ namespace Avalonia.Base.UnitTests.Data.Core
                 result);
 
             sub.Dispose();
+            
+            // Forces WeakEvent compact
+            Dispatcher.UIThread.RunJobs();
 
             Assert.Equal(0, data.PropertyChangedSubscriptionCount);
             Assert.Equal(0, data.Next.PropertyChangedSubscriptionCount);
@@ -412,6 +430,9 @@ namespace Avalonia.Base.UnitTests.Data.Core
             sub1.Dispose();
             sub2.Dispose();
 
+            // Forces WeakEvent compact
+            Dispatcher.UIThread.RunJobs();
+            
             Assert.Equal(0, data.PropertyChangedSubscriptionCount);
 
             GC.KeepAlive(data);
@@ -535,6 +556,8 @@ namespace Avalonia.Base.UnitTests.Data.Core
                 },
                 result);
 
+            // Forces WeakEvent compact
+            Dispatcher.UIThread.RunJobs();
             Assert.Equal(0, first.PropertyChangedSubscriptionCount);
             Assert.Equal(0, second.PropertyChangedSubscriptionCount);
 

+ 3 - 0
tests/Avalonia.Base.UnitTests/Data/Core/Plugins/IndeiValidationPluginTests.cs

@@ -3,6 +3,7 @@ using System.Collections;
 using System.Collections.Generic;
 using Avalonia.Data;
 using Avalonia.Data.Core.Plugins;
+using Avalonia.Threading;
 using Xunit;
 
 namespace Avalonia.Base.UnitTests.Data.Core.Plugins
@@ -57,6 +58,8 @@ namespace Avalonia.Base.UnitTests.Data.Core.Plugins
             validator.Subscribe(_ => { });
             Assert.Equal(1, data.ErrorsChangedSubscriptionCount);
             validator.Unsubscribe();
+            // Forces WeakEvent compact
+            Dispatcher.UIThread.RunJobs();
             Assert.Equal(0, data.ErrorsChangedSubscriptionCount);
         }