From 91e4bd00b6b842006bbb455693df29ae5935ee06 Mon Sep 17 00:00:00 2001 From: Nikita Tsukanov Date: Sat, 25 Mar 2023 17:52:28 +0600 Subject: [PATCH] Fixed more tests --- src/Avalonia.Controls/Control.cs | 8 ++++++++ tests/Avalonia.Controls.UnitTests/LoadedTests.cs | 4 ++++ tests/Avalonia.UnitTests/UnitTestApplication.cs | 6 +++++- 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/Avalonia.Controls/Control.cs b/src/Avalonia.Controls/Control.cs index 325593508c..621bdd1017 100644 --- a/src/Avalonia.Controls/Control.cs +++ b/src/Avalonia.Controls/Control.cs @@ -527,5 +527,13 @@ namespace Avalonia.Controls } } } + + // Since we are resetting the dispatcher instance, the callback might never arrive + internal static void ResetLoadedQueueForUnitTests() + { + _loadedQueue.Clear(); + _loadedProcessingQueue.Clear(); + _isLoadedProcessing = false; + } } } diff --git a/tests/Avalonia.Controls.UnitTests/LoadedTests.cs b/tests/Avalonia.Controls.UnitTests/LoadedTests.cs index aaf0dce30e..555ba02409 100644 --- a/tests/Avalonia.Controls.UnitTests/LoadedTests.cs +++ b/tests/Avalonia.Controls.UnitTests/LoadedTests.cs @@ -11,6 +11,8 @@ public class LoadedTests [Fact] public void Window_Loads_And_Unloads() { + // Some other tests are populating the queue and are not resetting the dispatcher, so we need to purge it + Control.ResetLoadedQueueForUnitTests(); using (UnitTestApplication.Start(TestServices.StyledWindow)) { int loadedCount = 0, unloadedCount = 0; @@ -40,6 +42,8 @@ public class LoadedTests [Fact] public void Control_Loads_And_Unloads() { + // Some other tests are populating the queue and are not resetting the dispatcher, so we need to purge it + Control.ResetLoadedQueueForUnitTests(); using (UnitTestApplication.Start(TestServices.StyledWindow)) { int loadedCount = 0, unloadedCount = 0; diff --git a/tests/Avalonia.UnitTests/UnitTestApplication.cs b/tests/Avalonia.UnitTests/UnitTestApplication.cs index 8d9f08caa1..32e597781c 100644 --- a/tests/Avalonia.UnitTests/UnitTestApplication.cs +++ b/tests/Avalonia.UnitTests/UnitTestApplication.cs @@ -8,6 +8,7 @@ using Avalonia.Rendering; using Avalonia.Threading; using System.Reactive.Disposables; using System.Reactive.Concurrency; +using System.Threading; using Avalonia.Input.Platform; using Avalonia.Animation; using Avalonia.Media; @@ -42,7 +43,9 @@ namespace Avalonia.UnitTests public static IDisposable Start(TestServices services = null) { var scope = AvaloniaLocator.EnterScope(); - var app = new UnitTestApplication(services); + SynchronizationContext.SetSynchronizationContext(null); + AvaloniaSynchronizationContext.InstallIfNeeded(); + _ = new UnitTestApplication(services); Dispatcher.ResetForUnitTests(); return Disposable.Create(() => { @@ -53,6 +56,7 @@ namespace Avalonia.UnitTests scope.Dispose(); Dispatcher.ResetForUnitTests(); + SynchronizationContext.SetSynchronizationContext(null); }); }